207行目あたりからが今回のメイン部分になります。
入力されたアドレスが正しいウォレットアドレスかどうかを判定しています。
https://github.com/byteball/byteball-faucet
アドレスの仕様がわからなかったので↑のコードを使っています。
if (text.match(/unrecognized/i))
return console.log("ignoring: "+text);
var arrMatches = text.match(/\b[A-Z2-7]{32}\b/);
if (!arrMatches)
device.sendMessageToDevice(from_address, 'text', "Unrecognized");
var address = arrMatches[0];
if (!ValidationUtils.isValidAddress(address)){
device.sendMessageToDevice(from_address, 'text', "Please send a valid address.有効なアドレスを入力してください");
}
else{
addressがスマートコントラクトから金額を取り出せるユーザー、
その下のin data feedが取り出し可能になる条件で、主にオラクルの値を使うことになります。
in data feed以外の値が指定できるのかなどについては不明です。
['address',address],//useraddress
['in data feed', [['I2ADHGP4HL6J37NQAD73J7E5SKFIXJOT'], 'timestamp', '>', Date.now()]]
まだ理解できていない部分ですが、上で記載したウォレットアドレスに対するデバイスアドレスを定義している?
わかり次第ここに書きます。
'r.0.0': {
address:address,//user_address
member_signing_path: 'r', // unused, should be always 'r'
device_address: from_address //user device address
},
コントラクト用に作成されたアドレスを使って
スマートコントラクトの作成、エンコード、ユーザーへの送付を行っています。
実際の開発でも1000の金額部分以外は特に変える必要はないと思います。
var arrPayments = [{address: shared_address, amount: 1000, asset: 'base'}];
var assocDefinitions = {};
assocDefinitions[shared_address] = {
definition: arrDefinition,
signers: assocSignersByPath
};
var objPaymentRequest = {payments: arrPayments, definitions: assocDefinitions};
var paymentJson = JSON.stringify(objPaymentRequest);
var paymentJsonBase64 = Buffer(paymentJson).toString('base64');
var paymentRequestCode = 'payment:'+paymentJsonBase64;
var paymentRequestText = '[your share of payment to the contract]('+paymentRequestCode+')';
device.sendMessageToDevice(from_address, 'text', paymentRequestText);
}