我的坚固合同如下:
contract SimpleStorage {
uint storedData;
function set(uint x) {
storedData = x;
}
function get() constant returns (uint retVal) {
return storedData;
}}
并生成abi如下:
[ { "constant": false, "inputs": [ { "name": "x", "type": "uint256" } ], "name": "set", "outputs": [], "type": "function" }, { "constant": true, "inputs": [], "name": "get", "outputs": [ { "name": "retVal", "type": "uint256", "value": "0" } ], "type": "function" } ]
并由https://github.com/ethereum/wiki/wiki/JSON-RPC引用,
如何使用java(而不是js)调用获取功能和获取值?
答案 0 :(得分:2)
web3j迎合了这个用例。它使用Solidity编译的二进制文件和ABI文件在Java中生成Smart Contract包装器。
一旦您使用web3j生成了包装器代码,您就可以部署,然后按照以下方式调用上述合同示例中的方法:
SimpleStorage simpleStorage = SimpleStorage.deploy(
<web3j>, <credentials>, GAS_PRICE, GAS_LIMIT,
BigInteger.ZERO); // ether value of contract
TransactionReceipt transactionReceipt = simpleStorage.set(
new Uint256(BigInteger.valueOf(1000))),
.get();
Uint256 result = simpleStorage.get()
.get();
注意:额外的get()
是因为web3j在与以太坊客户交互时返回Java Futures。
有关详细信息,请参阅docs。
答案 1 :(得分:0)
以下是Java中的一个示例(在Spring Boot下) 祝好运 http://blockchainers.org/index.php/2016/09/22/static-type-safety-for-dapps-without-javascript/