美文网首页
如何通过编程实现EOS钱包转账及在Newdex下单

如何通过编程实现EOS钱包转账及在Newdex下单

作者: 杨卫祥_老杨提醒 | 来源:发表于2019-12-14 23:57 被阅读0次

最近想通过编程实现在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 &

我在这里犯了个常识错误,看到这个我以为是输入第一行,结果问了金马才发现我这里输入错了,应该是上面全部代码一次输入,那个\代表换行继续输入。看来我这个外外行学程序的还是需要系统的学下程序的基础。

这一步成功了,下一步的节点才能正常运行;

curl http://localhost:8888/v1/chain/get_info

再接下来就是钱包的操作了,检查钱包列表

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,代币,及在去中心化交易所下单了。

相关文章

网友评论

      本文标题:如何通过编程实现EOS钱包转账及在Newdex下单

      本文链接:https://www.haomeiwen.com/subject/juxknctx.html