Bitcoin API calls 和訳版を参考に、WEB Walletを作るには?という視点でmonacoindで色々やってみました。
流れ的には以下のような感じでしょうか。
getaccountaddressでDeposit用のアドレスを作成。
その際、ユーザ固有のアカウントをアドレスに紐付ける。
既存のものではなく、新しいアドレスを作成するには、getnewaddressで新規作成する。
アカウントのアドレスリストは、getaddressesbyaccountで取得する。
getbalanceでアカウントの残高を確認。
listtransactionsでトランザクション履歴を確認。
sendfromで指定のアドレスへWithdrawする。
では、それぞれのメソッドを確認していきます。
- getaccountaddress
指定したアカウントに支払いを受けるための、最新のアドレスを返します。
なければ作成、あればそれを返す。
$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"1","method":"getaccountaddress","params":["testAc"]}' -H 'content-type:text/plain;' http://127.0.0.1:9359
MVPMzNXWwu4db4uwUzFm3NbDLRvpjmfkSCがtestAcにおけるDeposit用のアドレスとなります。
- getnewaddress
呼ぶたびに新しいアドレスを返します。(以下は2回呼んだ結果)
$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"1","method":"getnewaddress","params":["testAc"]}' -H 'content-type:text/plain;' http://127.0.0.1:9359 {"result":"MUh5HD2VEC1UGZxxF1TRcKKsFCbGfmjEpq","error":null,"id":"1"} {"result":"MS6WsHkyb9cFrHrxKFmi7bARwwpvNRvhsH","error":null,"id":"1"}
内部的にどうなっているのか、先ほど使ったgetaccountaddressで確認してみます。
{"result":"MVPMzNXWwu4db4uwUzFm3NbDLRvpjmfkSC","error":null,"id":"1"}
受信用アドレスは、新しいアドレス生成前と変わっていません。
- getaddressesbyaccount
指定したアカウントのアドレスリストを返します。
$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"1","method":"getaddressesbyaccount","params":["testAc"]}' -H 'content-type:text/plain;' http://127.0.0.1:9359 {"result":["MUh5HD2VEC1UGZxxF1TRcKKsFCbGfmjEpq","MS6WsHkyb9cFrHrxKFmi7bARwwpvNRvhsH","MVPMzNXWwu4db4uwUzFm3NbDLRvpjmfkSC"],"error":null,"id":"1"}
もともとのアドレスに加え、新規で生成したアドレスがアカウントに紐付いています。
ここで0.01MONAほど入金してみます。
getaddressesbyaccountで確認すると、アドレスが増えています。
{"result":["MLGDvB3UoYEV9FvWkq2xkvFrxh6bPLniQE","MUh5HD2VEC1UGZxxF1TRcKKsFCbGfmjEpq","MS6WsHkyb9cFrHrxKFmi7bARwwpvNRvhsH","MVPMzNXWwu4db4uwUzFm3NbDLRvpjmfkSC"],"error":null,"id":"1"}
getaccountaddressで確認すると、新しいアドレスが入金用アドレスに変わっています。
{"result":"MLGDvB3UoYEV9FvWkq2xkvFrxh6bPLniQE","error":null,"id":"1"}
- getbalance
指定したアカウントの残高を返します。
$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"1","method":"getbalance","params":["testAc"]}' -H 'content-type:text/plain;' http://127.0.0.1:9359 {"result":0.01000000,"error":null,"id":"1"}
- listtransactions
トランザクション履歴を返します。
$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"1","method":"listtransactions","params":["testAc"]}' -H 'content-type:text/plain;' http://127.0.0.1:9359 {"result":[{"account":"testAc","address":"MVPMzNXWwu4db4uwUzFm3NbDLRvpjmfkSC","category":"receive","amount":0.01000000,"confirmations":6,"blockhash":"d4dd988599a7649897a80ed94dd5f9e3642c9be33d76fa067bda3dcf352802b0","blockindex":18,"blocktime":1407077735,"txid":"9ee8386695853db90dd2d37abc46e65874a68db51e4daf2721e1ce1a3441156b","normtxid":"0e36640249a1b732c99311e8babbc85a7db43f7640b136188e5a78853b014d6f","time":1407077288,"timereceived":1407077288}],"error":null,"id":"1"}
categoryがreceiveのトランザクション履歴が確認出来ます。
- sendfrom
指定したアカウントから送金します。
$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"1","method":"sendfrom","params":["testAc","MR2j3u5oNWZzAAxeHtSinHUEVNiSbkn8zJ",0.001]}' -H 'content-type:text/plain;' http://127.0.0.1:9359 {"result":"92828b7bf40b85b41f7deeb4e8f90ed2a14ced8efa83875132ca9319967f771f","error":null,"id":"1"}
listtransactionsで再度トランザクション履歴を確認してみます。
{"result":[{"account":"testAc","address":"MVPMzNXWwu4db4uwUzFm3NbDLRvpjmfkSC","category":"receive","amount":0.01000000,"confirmations":7,"blockhash":"d4dd988599a7649897a80ed94dd5f9e3642c9be33d76fa067bda3dcf352802b0","blockindex":18,"blocktime":1407077735,"txid":"9ee8386695853db90dd2d37abc46e65874a68db51e4daf2721e1ce1a3441156b","normtxid":"0e36640249a1b732c99311e8babbc85a7db43f7640b136188e5a78853b014d6f","time":1407077288,"timereceived":1407077288},{"account":"testAc","address":"MR2j3u5oNWZzAAxeHtSinHUEVNiSbkn8zJ","category":"send","amount":-0.00100000,"fee":-0.00100000,"confirmations":0,"txid":"92828b7bf40b85b41f7deeb4e8f90ed2a14ced8efa83875132ca9319967f771f","normtxid":"8a13b422a5c0adbe08b4b410d22457e1570142bfde66068a708ec19eddc8aee4","time":1407078088,"timereceived":1407078088}],"error":null,"id":"1"}
categoryがsendのトランザクションが増えました。
WEB Walletなんてのは実装としては意外と簡単なんですね。
セキュリティとか考えなければ、ですが。
0 件のコメント:
コメントを投稿