当前位置: 首页 > 知识库问答 >
问题:

Go-Ethereum: Android智能合约交互问题

法和硕
2023-03-14

我正在尝试使用去以太坊库通过移动设备(android)与智能合约进行交互。

Android系统

final String address_string = "0x8607e627604495ae9812c22bb1c98bdcba581978";
String abi = "[{\"constant\":false,\"inputs\":[],\"name\":\"get_s\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"new_s\",\"type\":\"string\"}],\"name\":\"set_s\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"d_s\",\"type\":\"string\"}],\"payable\":false,\"type\":\"constructor\"}]";
Address address = Geth.newAddressFromHex(address_string);
BoundContract contract = Geth.bindContract(address, abi, ec);
CallOpts callOpts = Geth.newCallOpts();
callOpts.setContext(ctx);
callOpts.setGasLimit(31500);
System.out.println("OUTPUT: " + getString(contract, callOpts));

//Setter String to Test Contract
Interfaces params = Geth.newInterfaces(1);
Interface anInterface = Geth.newInterface();
anInterface.setString(teststring);
params.set(0,anInterface);
return contract.transact(opts, "set_s", params);

//Getter String from Test Contract
Interfaces args = Geth.newInterfaces(0);
Interfaces results = Geth.newInterfaces(1);
Interface result = Geth.newInterface();
result.setDefaultString();
results.set(0, result);
contract.call(opts, results, "get_s", args);
String string = results.get(0).getString();
return string;

合同

pragma solidity ^0.4.9;

contract echo {
   string s;

   function echo(string d_s) {
           s = d_s;
   }

   function set_s(string new_s) {
           s = new_s;
   }

   function get_s() returns (string) {
           return s;
    }
}

预期行为

在林克比区块链号上与部署的智能合同成功互动。

实际行为

对于 setter(在合同上):'abi:不能使用切片作为类型字符串作为参数'

对于 getter(在合约上):'abi:无法在 []接口 {}中取消使用字符串

复制行为的步骤

1.)通过手机连接到Rinkeby测试网

2.)通过手机创建帐户

3.)通过桌面部署智能合约

4.)尝试通过移动设备与智能合约进行交互

结果

如果有人能够通过go以太坊android与智能合约进行交互,我将感谢您的帮助。

共有1个答案

宇文俊明
2023-03-14

解决该问题。https://github.com/ethereum/go-ethereum/pull/15402

我在等待反馈。

 类似资料:
  • 部署智能合约及与智能合约交互 如果你想避免使用智能合约的底层实现细节,web3j提供solidity的智能合约的封装包,使你能够通过web3j生成的包装对象直接与智能合约的所有方法进行交互。 另外,如果你希望发送常规交易或希望在与智能合约的交互中有更多的控制权,请参阅web3j教程:java使用web3j开发以太坊智能合约交易,这里讲到了创建智能合约,与智能合约进行交易,查询智能合约的状态等内容。

  • 与智能合约交易 要与现有的智能合约进行交易,需要提供以下属性: to:智能合同地址 value:在智能合约中你希望存放的以太币Ether量(如果智能合约接受以太币Ether的话) data: 已编码的函数选择器和自变量参数 web3j负责函数编码,有关实现的进一步细节,请参阅应用程序二进制接口部分Application Binary Interface。 Function function = n

  • 我对与来自Java应用程序的智能合约交互的工作流(序列)有很多问题,因此我将首先解释我所做的,然后提出我的问题,如果我的理解有问题,请告诉我。 1-我写了智能合约2-使用truffle获取智能合约java包装器。(contract.java)3-使用testrpc测试合约 我有两个类:使用testrpc帐户(凭据)与智能合约交互并调用其函数 每个类(node1.java,node1.java)调用

  • 当将智能合约部署到私有区块链,并试图通过Android Studio应用程序对智能合约中的方法调用执行SendAsync时,我们会在控制台中收到一条消息,声明以下消息:I/System。出局:java。util。同时发生的CompletableFuture@427c299[未完成]。问题在于我的MainActivity中名为VarName的变量。java文件如下所示。 我试图通过创建交易收据的传统

  • 指导编写一个EOSIO的智能合约 模块 Account API 查询账户数据的API. Chain API 查询链内部状态的API. Database API 存储和检索EOS.IO区块链的数据API根据以下广泛结构来组织数据. Math API 定义常用的数学函数. Action API 定义用于查询操作属性的API. Memory API 定义常用的记忆功能. Console API 使应用程

  • 编程语言 使用golang作为编程语言(对部分关键字限制,以保证处理的有序性),而不是重新创造编程语言。 golang是一个简单、易用的编程语言,它有完善的帮助文档和开发工具。 它是强类型校验,编译阶段就能够校验发现很多bug。 它是模块化的,本系统能够简单屏蔽外部功能,使智能合约处在简单可预期的环境中。 已经有大量的golang开发人员,他们如果要开发智能合约,非常容易上手。 智能合约的分类 公