美文网首页区块链研习社
区块链开发之EOS钱包APP

区块链开发之EOS钱包APP

作者: zhangchunlin | 来源:发表于2020-04-10 09:21 被阅读0次

    1、目录

    1. 基础概念
    2. 开发准备
    3. 实战编码
    4. 总结

    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公私钥的的工具,代码已开源

    image
    2、依赖官方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人机验证,就需要你的网络需要翻墙。
    注册完成后,会的到一下东西。

    image
    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的合约方法如下:

    image

    例如;
    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、需要源码 可以评论留言

    相关文章

      网友评论

        本文标题:区块链开发之EOS钱包APP

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