XRPの送金

XRPを送金してみた!的な記事がない、という話をTwitterでしたので書きます。
ちなみに私はエンジニアでもなんでもないのでコードは読めないし書けません。rippleの公式読みながら自分でやった方法を載せているだけです。
こんなめんどくさいことやらなくても、minimalist-ripple-client: Github, web これをつかえば簡単にできます!笑

Index
- アドレスの作成
- 送金


1.アドレスの作成

Ripple API Beginners Guide にしたがって環境と整えます。
node.jsとnpmを入れればよいとのこと。
First RippleAPI Scriptとして例を書いてくれていますので、以後これをベースにcustom codeを書き換えます。アドレス生成ではAPIのところをgenerateAddressにします。

/* begin custom code ------------------------------------ */
console.log('genarate new address');
return api.generateAddress();
}).then(info => {
console.log(info);
console.log('generateAddress done');
/* end custom code -------------------------------------- */

これを保存して実行します。

./node_modules/.bin/babel-node genAddress.js

するとこのようにアドレスとプライベートキーをつくってくれます。
取引所などからこのアドレスに送金すればOKです。

{ secret: 'SecretKey',
address: 'rB7XrXhkbEMvhx2uE1CsJkR2yZeTJCRU78' }

2. 送金

送金は、Paymentをつくり、Signして、Submitするという流れになります。

2–1. Prepare Payment

まずpreparePaymentを参照しながらcustom codeを編集します。

/* begin custom code ------------------------------------ */
const address = 'rh9SyknetLLZvWFtCwbMtiafaUYH3Xcgka';
const payment = {
"source": {
"address": address,
"maxAmount": {
"value": "20",
"currency": "XRP",
}
},
"destination": {
"address": "rB7XrXhkbEMvhx2uE1CsJkR2yZeTJCRU78",
"amount": {
"value": "20",
"currency": "XRP",
}
}
};
const instructions = {
"maxLedgerVersionOffset": 30
}
return api.preparePayment(address, payment, instructions);
}).then(info => {
console.log(info);
console.log('preparePayment done');
/* end custom code -------------------------------------- */

source.adddress: 送信元アドレス
destination.address: 受信アドレス
amount.value: 送金額
amount.currency: なにを送りたいか。ここではXRPです。
maxLedgerVersionOffset: 現在のLedgerのいくつあとまで待つか、という値のようです。デフォルトは3。

txJSONを返してくれるので、これにsignします

e.g.
txJSON: '{"TransactionType":"Payment","Account":"rh9SyknetLLZvWFtCwbMtiafaUYH3Xcgka","Destination":"rB7XrXhkbEMvhx2uE1CsJkR2yZeTJCRU78","Amount":"19000000","Flags":2147483648,"LastLedgerSequence":30009965,"Fee":"12","Sequence":5}'

2–2. Sign

/* begin custom code ------------------------------------ */
const txJSON =  '{"TransactionType":"Payment","Account":"rh9SyknetLLZvWFtCwbMtiafaUYH3Xcgka","Destination":"rB7XrXhkbEMvhx2uE1CsJkR2yZeTJCRU78","Amount":"20000000","Flags":2147483648,"LastLedgerSequence":30011523,"Fee":"6232","Sequence":6}';
const secret = 'secretKey';
return api.sign(txJSON, secret);
}).then(info => {
console.log(info);
console.log('sign done');
/* end custom code -------------------------------------- */

singedTransactionを返してくれるので、それをSubmitします。

e.g.
{ signedTransaction: '12000022800000002400000006201B01C9F083614000000001312D0068400000000000185873210222146B147E0DE1A96E4C7CE5A28DB080C265F5FB401C311A6F77C24B1EF0E67674473045022100E49DD6D4659116D802C94B11840106F7D426EC3907A5354A8CA1E67705E8B94A02203E92539BCAC44C6D6B283B294FCA9FE0937BF067398DFF99AB7DA4D5C416F5C181142281640229F51D620916881FDFD19836A58CAA2E831472E589FC40CCF57996E525D244E3B9A8049D784D',
id: 'D582408E56C754985691736B441E1500E4D0D3F5E7FB9418DC00C92815D183D5' }

2–3. Submit

/* begin custom code ------------------------------------ */
const signedTransaction = '12000022800000002400000006201B01C9F083614000000001312D0068400000000000185873210222146B147E0DE1A96E4C7CE5A28DB080C265F5FB401C311A6F77C24B1EF0E67674473045022100E49DD6D4659116D802C94B11840106F7D426EC3907A5354A8CA1E67705E8B94A02203E92539BCAC44C6D6B283B294FCA9FE0937BF067398DFF99AB7DA4D5C416F5C181142281640229F51D620916881FDFD19836A58CAA2E831472E589FC40CCF57996E525D244E3B9A8049D784D';
return api.submit(signedTransaction)
}).then(info => {
console.log(info);
console.log('submit done');
/* end custom code -------------------------------------- */

Rippleはアカウントを有効化するために20xrpをReserveする必要があるため、それ以下を送ろうとするとエラー出されました。
tesSUCCESSとでればよいようです。
account explorerで対象のアドレスを確認しておきましょう。

{ resultCode: 'tesSUCCESS',
resultMessage: 'The transaction was applied. Only final in a validated ledger.' }
submit done
done and disconnected.

簡単にやりたい場合はこんなツールもあるので、いろいろインストールしなくてもできます。
minimalist-ripple-client: Github, web

オフラインでの署名は試す時間がなくてまだやっていませんm(__)m
また暇があればやりますが、やり方自体は同じはずです。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.