中国互联网安全企业360集团创始人兼CEO周鸿祎( yī)先生曾引用毛主席“地在人失,人地皆失。地失人在,人地皆得”的名言来形容互联网产品和用户之间微妙的关系,有了用户便会有收入,但若仅仅关注收入就会失去用户,最终落得个“人地皆失”的下场。区块链数字货币交易所的生存之道亦是如此。
可是关于数字货币交易所跑路、平台数字资产被盗、宕机拔网线插等恶性事件层出不穷,给各大数字货币交易所带来了严重的信任危机。安全与风控成为交易所今后发展的重中之重,例如某交易所在遭遇盗币事件后将发展路径的核心词正式确立为“安全第一”,交易所的高管层一致认为只有平台资金安全有保障,平台才能谋求更长远的发展。
虽然数字资产价值与日俱增,但黑客、内鬼们利用交易所安全漏洞盗取数字资产动力愈发增强,面对此类事件,担当管理数字资产重任的区块链钱包彰显着无可替代的地位。于是,交易所投资方开启了搭建区块链交易所平台的漫漫之路。
一些技术人员在接触BTC期间,总是被转账却不能指定转出账户所而苦恼,今天就BTC bitcoin-cli转账和交易的API使用出一个教程,欢迎不同意见。
开发环境
PC端A window10 + BitcoinCore(testnet,64bit) 0.16.2 下载地址
PC端B ubuntu16.04 + BitcoinCore 0.16.2 安装教程
转账与交易的api
一、sendtoaddress方法
1、命令格式:sendtoaddress “address” amount ( “comment” “comment_to” subtractfeefromamount replaceable conf_target “estimate_mode”)2、举例(以下举例都是在PC端B):
bitcoin-cli sendtoaddress “1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd” 0.1 “donation” “seans outpost”
进行返回交易id或者错误信息的操作。
3、 笔者见解:很多方法都提及sendtoaddress,简单理解是对某个地址转账,但并未设置转出账号或者转出地址的参数,笔者理解此时是以整个钱包的余额为转出的。
二、关于使用utxo 创建交易的方法
必须用到三个API,它们是 createrawtransaction(创建交易),signrawtransaction (签名交易)及sendrawtransaction(广播交易),
1、命令格式:
createrawtransaction [{“txid”:”id”,”vout”:n},…] {“address”:amount,”data”:”hex”,…} ( locktime ) ( replaceable )
signrawtransaction “hexstring” ( [{“txid”:”id”,”vout”:n,”scriptPubKey”:”hex”,”redeemScript”:”hex”},…] [“privatekey1”,…] sighashtype )
sendrawtransaction “hexstring” ( allowhighfees )
2、举例:参考这个。
3、笔者见解:首先要列出utxo,假如列出了太多项,可以选择在listunspent 后面加地址筛选utxo, 比如
bitcoin-cli listunspent 6 9999999 “[”1PGFqEzfmQch1gKD3ra4k18PNj3tTUUSqg”,”1LtvqCaApEdUGFkpKMM4MstjcaL4dKg8SP”]”
将1PGF…和1Ltvq…地址的6到9999999确认数的utxo罗列出来。
接着选取utxo的输出作为 createrawtransaction输入,然后填写想要转账的地址和金额,最终在进行签名和广播。
恰恰在regtest环境中确认数已经达到6,笔者遇到转账的地址收到金额后,listunspent依旧能列出作为本次输入的uxto的问题,这次的utxo应该不再出现,
通俗来说:小明有一张面值10元的支票,小明要购买一杯5元的奶茶,此时小明需要创建两张面额5元支票,一张给商家,一张找零给他自己,同时还需要原来这张面额10元的支票撕毁。回到举例中作为输入的utxo就是10元的支票,不明白为什么还能列出来。
三、 sendfrom
官方介绍提醒下个版本要删除了
1、命令格式 sendfrom “fromaccount” “toaddress” amount ( minconf “comment” “comment_to” )
2、举例:bitcoin-cli sendfrom “tabby” “1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd” 0.01 6 “donation” “seans outpost”
3、笔者见解:从账户tabby中转给地址1M72…..0.01 BTC,确认数6。 除了不能转个多个地址。
四、 sendmany
在sendfrom原有基础上增添了多个转账地址
1、命令格式:sendmany “fromaccount” {“address”:amount,…} ( minconf “comment” 2、2、举例: bitcoin-cli sendmany “tabby” “{”1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX”:0.01,”1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz”:0.02}” 6
2、笔者见解: 举例中从账户tabby转给地址1D1Z…..0.01 BTC,给地址1353t…..转0.02BTC,确认数6。
对此api还是比较满意的,但是看官方介绍,账户参数要删除了 :
传统交易所自己开发的钱包都是热钱包机制,节点同步慢,归集非常麻烦,最重要的是这些私钥存在服务器上危险系数极高,黑客一旦攻破安全防线,几乎所有数字资产被盗走。更重要的是,自己开发钱包需要搭建各个币种节点,太耗费硬盘和同步时间。在github上偶遇优盾钱包这个企业钱包开放平台后,通过API直接接入就行,有独立客户端操作审核、归集等,私钥也是自己在客户端上管理,服务器上不存。