zoukankan      html  css  js  c++  java
  • android如何与以太坊区块链进行交互

    如果要下载整个以太坊区块链并保持本地节点同步。当区块链占用了我计算机上超过100GB的空间。这在台式计算机上可能有意义,但在移动设备上则不太合理。

    解决此限制的一种方法是使用像Infura这样的服务。Infura允许你连接到远程以太坊节点并执行交易,而无需担心维护和同步本地节点。

    为了能够使用本机Java代码与智能合约进行交易,我们使用一个名为Web3j的库。Web3j为你提供生成智能合约java封装包的实用程序,以及通过HTTP和IPC完整实现以太坊的JSON-RPC客户端API。它提供了更多功能,但刚说的这些对这个“Android Ethereum hello world”示例来说最重要的功能。

    我想要与之互动的示例智能合约是一个Greeter。它在区块链上存储可以读取或更新的问候消息。它看起来像这样:

    contract greeter is mortal {
        /* define variable greeting of the type string */
        string greeting;
    
        /* this runs when the contract is executed */
        function greeter(string _greeting) public {
            greeting = _greeting;
        }
    
        /* change greeting */
        function changeGreeting(string _greeting) public {
            greeting = _greeting;
        }
    
        /* main function */
        function greet() constant returns (string) {
            return greeting;
        }
    }
    

    为了能够创建封装包,我们首先要编译这个智能合约:

    solc greeter.sol --bin --abi --optimize -o <output-dir>/
    

    要生成运行的封装包:

    web3j solidity generate /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name
    

    Java部分

    首先,我们需要获得以太坊区块链交互的Web3实例。它看起来像这样:

    InfuraHttpService infuraHttpService = new InfuraHttpService(url);
    Web3j web3j = Web3jFactory.build("https://ropsten.infura.io/YOUR_API_KEY");
    

    现在我们可以读取合约几乎是即时的。

    Greeter greeter = Greeter.load(greeterContractAddress, web3j, credentials, gasPrice, gasLimit);
    Future<Utf8String> greeting = greeter.greet();
    Utf8String greetingUtf8 = greeting.get();
    String result = greetingUtf8.getValue();
    

    但交易不是即时的,可能需要几分钟才能得到验证。

    Greeter greeter = Greeter.load(greeterContractAddress, web3j, credentials, gasPrice, gasLimit);
    TransactionReceipt transactionReceipt = greeter.changeGreeting(new Utf8String(greetingToWrite)).get(timeout);
    String result = "Successful transaction. Gas used: " + transactionReceipt.getGasUsed();
    

    完整的例子看github这里

  • 相关阅读:
    pycharm激活(JetBrains IDEA 系列产品通用xx方法(license server))
    纯css美化下拉框、复选框以及单选框样式并用jquery获取到其被选中的val
    字符串替换
    jquery 倒计时效果
    js 数字前自动补零
    css 常用的绝对定位元素水平垂直居中的方法
    webapp中绝对定位/固定定位与虚拟键盘冲突的问题
    css 兼容各种iPhone
    使用 position:sticky 实现粘性布局
    jquery判断点击鼠标左、中、右键事件
  • 原文地址:https://www.cnblogs.com/malakashi/p/9548048.html
Copyright © 2011-2022 走看看