最近想通过编程实现在Newdex下单,查看其API文件之后发现,Newdex的API不包括下单的API,Newdex订单是直接从链上读取的,本质上是用户下单是通过向Newdex转账来生成的。下单信息则是通过这笔转账memo中读取。
也就是说下单是通过EOS钱包转账实现的,因为Newdex是个去中心化交易所,登陆的EOS钱包账户。
那么要实现编程转账,就需要搞清楚如何用EOS钱包实现转账。
在Newdex的API指导文件说明下,可以使用cleos发起转账,cleos是EOS官方发布的命令行工具,要使用这个工具,就需要使用包管理安装eos工具,就引入到了EOS官方开发文档页面,根据提示一步步安装。
在终端上使用Brew安装eos库
brew tap eosio/eosio
brew install eosio
如果没有安装过Brew需要先把这个安装了
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
这个安装过程也是很费劲,有可能是网络问题,试了好几次才成功。
接下来就需要使用节点设置
开始keosd,keosd是管理秘钥的钱包服务工具
命令行输入:keosd &
接下来要开始节点nodeos,就是节点守护进程,命令行输入
nodeos -e -p eosio \
--plugin eosio::producer_plugin \
--plugin eosio::chain_api_plugin \
--plugin eosio::http_plugin \
--plugin eosio::history_plugin \
--plugin eosio::history_api_plugin \
--filter-on="*" \
--access-control-allow-origin='*' \
--contracts-console \
--http-validate-host=false \
--verbose-http-errors >> nodeos.log 2>&1 &
我在这里犯了个常识错误,看到这个我以为是输入第一行,结果问了金马才发现我这里输入错了,应该是上面全部代码一次输入,那个\代表换行继续输入。看来我这个外外行学程序的还是需要系统的学下程序的基础。
这一步成功了,下一步的节点才能正常运行;
再接下来就是钱包的操作了,检查钱包列表
cleos wallet list
返回为空,因为还没有创建。
创建钱包,官方说明这里最好在命令cleos wallet create后面使用to-file,这样呢钱包的密码就不会直接显示在终端中。
The first step is to create a wallet. Use cleos wallet create to create a new "default" wallet using the option --to-console for simplicity.If using cleos in production, it's wise to instead use --to-file so your wallet password is not in your bash history.For development purposes and because these are development and not production keys --to-console poses no security threat.
当时没太理解,以为与下面这句把密码显示出来
cleos wallet create--to-console
对应的就直接在后面改成这样
cleos wallet create --to-file
但死活不成功,后来查阅其它资料才发现正确的命令应该是
cleos wallet create --file my-wallet.txt
这样就把新建钱包的密码存储到my-wallet.txt文件中,这个文件就在初始目录中。
注意这个密码有点像imtoken或TP的登陆密码,这个时候其实里面还没有真正的EOS钱包。
接下来打开钱包:
cleos wallet open
解锁钱包,这个时候需要用到上面的密码了
cleos wallet unlock
我们使用这个转账,一般都有EOS钱包了,那下一步就要导入我们的钱包了,需要用到钱包的私钥
cleos wallet import
这个要注意风险,因为是我们真正的钱包,里面是有资产的,比如如果复制的,把电脑上的剪切板工具之类的要关掉。
按理来说接下来就可以转账了,但我用自己建的节点发现不成功,那就索性使用别人现有的节点,用命令-u 表示,比如使用如下节点
cleos -u https://eos.newdex.one transfer A B '0.0001 EOS' ''
上述命令就可以实现从账户A(这个是刚才我们导入私钥的账户)转到账户B,0.0001(四位小数都要写)个EOS, 最后面''是memo的内容,因为钱包转账所以为空。
转账其它代币需要带上合约 -c, —contract,如下
cleos -u https://eos.newdex.one transfer A B -c betdicetoken '0.0370 DICE' ' '
向newdex转账,实现交易,需要在memo上下功夫,官方说明如下
memo必须是标准的JSON字符串,否则不会生成订单。下面演示一个正确的memo格式
{"type":"buy-limit","symbol":"eosblackteam-black-eos","price":"0.03456","channel":"API"}
各个字段的含意及内容:
type:下单类型,有四种,分别是 buy-limit(限价买入),buy-market(市价买入),sell-limit(限价卖出),sell-market(市价卖出)
symbol:交易对名称,是由“合约名+币种名+交易区名”组合而成
price:交易价格,如果是市价单,此字段可以不填
channel:渠道名,此字段值固定为“API”
特别说明:对于买单,您必须使用交易区的计价货币转账,比如symbol为eosblackteam-black-eos,则您必须转账EOS。您的转账金额除以价格即为购买数量。对于卖单,直接转您要卖的token即可。
比如我们在下个pizza的卖单,其实就是使用自己的EOS账户向newdex转账pizza,需要知道其合约是pizzatotoken,相应数量,价格填写进去
cleos -u https://eos.newdex.one transfer blockchainly newdexpublic -c pizzatotoken '100.2643 PIZZA' '{"type":"sell-limit","symbol":"pizzatotoken-pizza-eos","price":"0.0029","channel":"API"}'
那如果我们要买pizza,想像下,我们转账的是什么?这时就不是pizza,而是EOS,所以这个时候合约需要写eos的合约eosio.token,转账金额里也要填写EOS及金额,而转账金额除以价格即为购买数量。
cleos -u https://eos.newdex.one transfer blockchainly newdexpublic -c eosio.token '0.0110 EOS' '{"type": "buy-limit","symbol":"pizzatotoken-pizza-eos","price":"0.0015","channel":"API"}'
这里面还有个大坑是什么呢?
官方文档中转账的例子是下面这个
cleos transfer useraaaaaaaa useraaaaaaac-ceosio.token "1.0000 SYS" "hello world"
当中数量和memo使用是双引号,而我在刚开始向newdex转账试的时候也是双引号,就一直报一个错误assertion failure with message: Sorry, type is invaid,提示type无效,但怎么改type都没用,最后发现把双引号改成单引号就行了。这个坑耽误了我一两个小时。
通过以上几个摸索,就可以方便使用EOS账户实现转账EOS,代币,及在去中心化交易所下单了。
网友评论