1、目录
- 基础概念
- 开发准备
- 实战编码
- 总结
2、基础概念
-
什么是EOS?
首先,要使用EOS钱包,你得先有一个EOS帐号。EOS账号就是你在EOS世界的通行证+身份证+钱包。EOS账号既不是私钥,也不是公钥,而是与私钥和公钥绑定的12位字符串。用这样的账号的明显好处就是好记+好用+安全。比如你要给谁转账,直接在账号栏输入对方的字符串即可(相当于地址,这个地址是和公钥私钥相绑定的),我就能收到了,不用给你我的公钥,更不会涉及私钥。使用EOS钱包的总体感觉就是资金流转方便,交易速度极快。和原有区块链转账方式对比起来简直是天上地下,双秒杀。
申请EOS账号是要花钱的,需要一个有EOS币的账户帮你创建,也可以下载某些EOS钱包他可以通过微信支付或支付宝支付创建。由于账户需要抵押一下资源或买一些内存,会花更多的钱,下面会讲什么资源和内存。 -
什么是RAM、CPU、NET?
RAM原是指电脑内存,在EOS系统中,你的帐户余额等数据需要存储在EOS系统中,RAM就是存储账户数据所占用的EOS系统的存储空间。RAM的单位常用的是KB。
CPU原是指电脑的中央处理器,在EOS系统中,CPU是指EOS系统处理操作指令所需的时间,CPU的单位是时间,常用ms毫秒。
NET原是电脑网络的意思,在EOS系统中,NET是EOS系统中传输数据的大小,单位是KB。举个粟子:
你的帐户相关信息数据假设是3KB大小,就要提前购买至少3KB的RAM来存储账户信息。
假如你要给另一个账户转账,EOS系统处理你的转账指令假设需耗费1ms时间,就要提前抵押EOS换取至少1ms的CPU。
同时,你发出的转账指令也是数据,需要占用EOS的网络资源,假设为1KB,就要提前抵押EOS换取至少1KB的NET。
一句话总结:RAM是账户占用的存储资源,CPU是操作指令占用的算力资源,NET是操作指令占用的网络资源。三种资源的获取方式:
RAM是永远占用的,需要用EOS购买,购买后永久使用。购买价格根据供需会上下浮动。
CPU和NET是一次性使用的,只需要抵押EOS换取,不直接收费。下面以CPU举例:CPU采用比例制,按用户的EOS抵押量占总抵押量的比例来分配CPU。比如全网有100个EOS用于抵押获得CPU的使用权,那么1个EOS就获得全网所有算力资源1%的使用时间。所以这个分配比例是变化的,也就是抵押的EOS数量不变,所得的CPU一直在变。
CPU和NET都是按天计算的,假设CPU价格是0.1EOS/ms/day,就是说0.1个EOS抵押一天可得1ms的CPU。因为算力资源和网络资源是不可累积的,CPU和NET也都是不可累积的,只会在使用后的第二天恢复。
3、开发准备
1、需要准备生成EOS公私钥的的工具,代码已开源
image2、依赖官方SDK
implementation 'one.block:eosiojava:0.1.2'
implementation 'one.block:eosiojavasoftkeysignatureprovider:0.1.3'
implementation 'one.block:eosiojavaandroidabieosserializationprovider:0.1.1'
implementation 'one.block:eosiojavarpcprovider:0.1.1'
android{
packagingOptions {
exclude 'lib/x86_64/darwin/libscrypt.dylib'
exclude 'lib/x86_64/freebsd/libscrypt.so'
exclude 'lib/x86_64/linux/libscrypt.so'
}
}
3、注册测试账户,这步可有可无
地址: https://testnet.eos.io/
注册过程就不讲了,如果没有出现Google人机验证,就需要你的网络需要翻墙。
注册完成后,会的到一下东西。
4、了解与EOS节点调用。
-
chain
chain/get_info
调用返回区块链总体信息。EOS开发入门。
chain/get_account
调用返回指定账号的描述信息。
chain/get_table_rows
调用指定多索引数据表的数据行。
chain/get_table_by_scope
调用返回多索引数据表中满足指定查询条件的数据行。
chain/abi_json_to_bin
调用将合约动作调用序列化为16进制字符串,以便应用于 push_action调用。
chain/abi_bin_to_json
调用将16进制码流反序列化为合约的动作调用。
chain/get_required_keys
调用返回签名一个交易时需要的公钥清单。
chain/push_transaction
调用将指定的交易提交到链上。 -
history
history/get_key_accounts
调用返回指定公钥所关联的账号。
更多调用方法: http://cw.hubwiz.com/card/c/eos-rpc-api/
4、实战编码
1、生成无助记词的EOS账户:
EosPrivateKey eosPrivateKey = EosPrivateKey();
System.out.println(eosPrivateKey.toWif());
System.out.println(eosPrivateKey.publicKey.toString());
结果:
5HycMUAMZcSugxkU7BfecZ6Bx6akd8S68tpNrGH2otgMrtwFfXF
EOS83eQ2iiS9DL7phqxBQHZhxgnCWoQKddjrBindou87aEbKkbwXh
2、生成有助记词的EOS账户:
String genMnemonic = ChainUtil.genMnemonic(Words.TWELVE)
ECKey genECKey = ChainUtil.genECKey(genMnemonic, "m/44'/194'/0'/0/0");
EosPrivateKey eosPrivateKey = EosPrivateKey(genECKey.privKeyBytes)
System.out.println(genMnemonic)
System.out.println(eosPrivateKey.toWif())
System.out.println(eosPrivateKey.publicKey.toString())
结果:
consider illness click ritual collect act cart grain awkward name feed question
5HycMUAMZcSugxkU7BfecZ6Bx6akd8S68tpNrGH2otgMrtwFfXF
EOS83eQ2iiS9DL7phqxBQHZhxgnCWoQKddjrBindou87aEbKkbwXh
3、创建账户:
首先需要你有一个有EOS的账户:这个一般是自己购买或者找别人代你创建。一般的做法是直接掉自己的服务器创建。
4、获取节点信息:
IRPCProvider rpcProvider = new EosioJavaRpcProviderImpl("https://api.testnet.eos.io");
GetInfoResponse info = rpcProvider.getInfo();
System.out.println(JSON.toJSONString(info));
结果:
{"blockCpuLimit":199900,"blockNetLimit":1048576,"chainId":"0db13ab9b321c37c0ba8481cb4681c2788b622c3abfd1f12f0e5353d44ba6e72","headBlockId":"00c01c085f1fd4463fd90117a4f32c4394822222fcbf75e7907dc73fc2cd94ba","headBlockNum":12590088,"headBlockProducer":"initd","headBlockTime":"2020-03-27T06:28:14.500","lastIrreversibleBlockId":"00c01abe58b36a630f6e91cf4309347849bb719865748bcee8d39c2b5a6b6e1b","lastIrreversibleBlockNum":12589758,"serverVersion":"e19afc80","serverVersionString":"v2.0.0","virtualBlockCpuLimit":200000000,"virtualBlockNetLimit":1048576000}
5、转账:
这是EOS标准的转账代码:来自官网: https://github.com/EOSIO/eosio-java
IRPCProvider rpcProvider = new EosioJavaRpcProviderImpl("https://api.testnet.eos.io");
ISerializationProvider serializationProvider = new AbiEosSerializationProviderImpl();
IABIProvider abiProvider = new ABIProviderImpl(rpcProvider, serializationProvider);
ISignatureProvider signatueProvider = new SoftKeySignatureProviderImpl();
signatureProvider.importKey(privateKeyK1EOS);
TransactionSession session = new TransactionSession(
serializationProvider,
rpcProvider,
abiProvider,
signatureProvider
);
TransactionProcessor processor = session.getTransactionProcessor();
String jsonData = "{\n" +
"\"from\": \"你的账户名\",\n" +
"\"to\": \"别人的账户名\",\n" +
"\"quantity\": \"10.0000 EOS\",\n" +
"\"memo\" : \"备注\"\n" +
"}";
List<Authorization> authorizations = new ArrayList<>();
authorizations.add(new Authorization("你的账户名", "active or owner"));
List<Action> actions = new ArrayList<>();
actions.add(new Action("eosio.token", "transfer", authorizations, jsonData));
processor.prepare(actions);
PushTransactionResponse pushTransactionResponse = processor.signAndBroadcast();
5、总结
1、所有的调链操作都是和转账一个套路:只是不同的合约,不同的方法,和不同的参数而已:
下面的EOSIO的合约方法如下:
例如;
refund:一般是你赎回资源3天以后还没到账:需要您调用一下这个方法,赎回。
jsonData = "{"account_name":"你的账户名"}"
actions.add(new Action("eosio", "refund", authorizations, jsonData));
其他的保持和上面不变。
参考链接:https://bloks.io/account/eosio?loadContract=true&tab=Actions&account=eosio&scope=eosio&limit=100
2、需要源码 可以评论留言
网友评论