生活随笔
收集整理的這篇文章主要介紹了
java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 前言
- 一、準備工作
- 二、智能合約的編寫
- 三、用java完成web3j調用
- (一)定義為生成對應合約的bin 以及 abi 文件
- (二)、利用abi,bin文件生成solidity的java代碼
- (三)、(部署)調用合約上的函數
前言
最近在學區塊鏈相關,想做點自己感興趣的。網上關于這塊部分的坑也比較多,最近也是問了很多行業從事者才慢慢填坑,因此記錄下來分享一下。
一、準備工作
錢包:metemask、solidity編譯器:remix 、java ide:idea。
二、智能合約的編寫
智能合約編寫的我選擇在remix上方便,而且部署的時候不需要自定義gasPrice,remix會自動調整價格。附上完整solidity合約代碼:
pragma solidity ^0.4.19;contract SimpleStorage {// 留言結構體struct Message {string word; // 留言address from; // 留言者地址string timestamp ; // 留言unix時間戳}Message[] private wordArr;/*** 寫入留言的方法*/function setWord(string s, string t) public {wordArr.push(Message({word: s,from: msg.sender,timestamp: t}));}/*** 獲取隨機留言的方法*/function getRandomWord(uint random) public view returns (uint, string, address, string) {if(wordArr.length==0){return (0, "", msg.sender, "");}else{Message storage result = wordArr[random];return (wordArr.length, result.word, result.from, result.timestamp);}}
}
- 這一部分填寫在remix上后先編譯
- 第二步來到部署運行界面,選擇測試鏈的虛擬環境(Injected Web3),他會
自動連接你的小狐貍賬戶。如果你想后續切換賬號,或者沒連接上,請點擊已連接,做出設置。
在這里可以先部署一次,然后獲取部署后的合約地址 - 部署完,他會返回一個地址。把地址填入At Address即可獲取地址上的合約,建議部署完就先測試一下,是否地址是否正確,部署是否成功。
三、用java完成web3j調用
<dependencies><!--web3j
--><dependency><groupId>org
.web3j
</groupId
><artifactId>core
</artifactId
><version>5.0.0</version
></dependency
><dependency><groupId>org
.web3j
</groupId
><artifactId>codegen
</artifactId
><version>5.0.0</version
></dependency
><!-- 由于ether
-camp
/solcJ不再維護,所以使用了FISCO
-BCOS
/solcj
--><dependency><groupId>org
.fisco
-bcos
</groupId
><artifactId>solcJ
</artifactId
><version>0.5.2.0</version
></dependency
><!-- https
://mvnrepository
.com
/artifact
/commons
-io
/commons
-io
--><dependency><groupId>commons
-io
</groupId
><artifactId>commons
-io
</artifactId
><version>2.4</version
></dependency
><!-- https
://mvnrepository
.com
/artifact
/com
.squareup
.okhttp3
/okhttp
--><dependency><groupId>com
.squareup
.okhttp3
</groupId
><artifactId>okhttp
</artifactId
><version>4.4.0</version
></dependency
><!-- https
://mvnrepository
.com
/artifact
/com
.squareup
.okhttp3
/okhttp
-ws
--><dependency><groupId>com
.squareup
.okhttp3
</groupId
><artifactId>okhttp
-ws
</artifactId
><version>3.4.2</version
></dependency
>
</dependencies
>
在確保remix部署上去,以及可以在remix調用部署函數后進行下一步。注:以下函數均定義在在自創建的SolidityUtils工具下。
(一)定義為生成對應合約的bin 以及 abi 文件
直接上Java代碼先:
public static void generateABIAndBIN(String abi
,String bin
,String abiFileName
,String binFileName
){File abiFile
= new File("src/main/resources/"+abiFileName
);File binFile
= new File("src/main/resources/"+binFileName
);BufferedOutputStream abiBos
= null;BufferedOutputStream binBos
= null;try{FileOutputStream abiFos
= new FileOutputStream(abiFile
);FileOutputStream binFos
= new FileOutputStream(binFile
);abiBos
= new BufferedOutputStream(abiFos
);binBos
= new BufferedOutputStream(binFos
);abiBos
.write(abi
.getBytes());abiBos
.flush();binBos
.write(bin
.getBytes());binBos
.flush();}catch (Exception e
){e
.printStackTrace();throw new BlogException(201,"留言寫入過程出現錯誤");}finally {if(abiBos
!= null){try{abiBos
.close();;}catch (IOException e
){e
.printStackTrace();}}if(binBos
!= null){try {binBos
.close();}catch (IOException e
){e
.printStackTrace();}}}}
- 接著去之前部署好的remix上復制所需的bin ,abi復制。
將復制好的abi,bin填入函數內,以及自己即將要生成的abi,bin的文件名。如下是測試函數:
@Testvoid genAbi(){String abi
= "[\n" +"\t{\n" +"\t\t\"constant\": false,\n" +"\t\t\"inputs\": [\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"s\",\n" +"\t\t\t\t\"type\": \"string\"\n" +"\t\t\t},\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"t\",\n" +"\t\t\t\t\"type\": \"string\"\n" +"\t\t\t}\n" +"\t\t],\n" +"\t\t\"name\": \"setWord\",\n" +"\t\t\"outputs\": [],\n" +"\t\t\"payable\": false,\n" +"\t\t\"stateMutability\": \"nonpayable\",\n" +"\t\t\"type\": \"function\"\n" +"\t},\n" +"\t{\n" +"\t\t\"constant\": true,\n" +"\t\t\"inputs\": [\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"random\",\n" +"\t\t\t\t\"type\": \"uint256\"\n" +"\t\t\t}\n" +"\t\t],\n" +"\t\t\"name\": \"getRandomWord\",\n" +"\t\t\"outputs\": [\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"\",\n" +"\t\t\t\t\"type\": \"uint256\"\n" +"\t\t\t},\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"\",\n" +"\t\t\t\t\"type\": \"string\"\n" +"\t\t\t},\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"\",\n" +"\t\t\t\t\"type\": \"address\"\n" +"\t\t\t},\n" +"\t\t\t{\n" +"\t\t\t\t\"name\": \"\",\n" +"\t\t\t\t\"type\": \"string\"\n" +"\t\t\t}\n" +"\t\t],\n" +"\t\t\"payable\": false,\n" +"\t\t\"stateMutability\": \"view\",\n" +"\t\t\"type\": \"function\"\n" +"\t}\n" +"]";String bin
= "{\n" +"\t\"linkReferences\": {},\n" +"\t\"object\": \"608060405234801561001057600080fd5b5061055e806100206000396000f30060806040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638c595a958114610050578063cc76b911146100e9575b600080fd5b34801561005c57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100e794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506102199650505050505050565b005b3480156100f557600080fd5b506101016004356102e0565b60405180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561017a578181015183820152602001610162565b50505050905090810190601f1680156101a75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156101da5781810151838201526020016101c2565b50505050905090810190601f1680156102075780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6040805160608101825283815233602080830191909152918101839052600080546001810180835591805282518051929460039092027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563019261027f9284920190610497565b5060208281015160018301805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff909216919091179055604083015180516102d89260028501920190610497565b505050505050565b60006060600060606000808054905060001415610321576040805160208181018352600080835283519182019093528281529196509450339350915061048f565b600080548790811061032f57fe5b6000918252602080832092546001600390930290930182810154815460408051601f6002600019988516156101000298909801909316879004928301869004860281018601909152818152929650869473ffffffffffffffffffffffffffffffffffffffff9092169391850192918591908301828280156103f15780601f106103c6576101008083540402835291602001916103f1565b820191906000526020600020905b8154815290600101906020018083116103d457829003601f168201915b5050845460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529598508694509250840190508282801561047f5780601f106104545761010080835404028352916020019161047f565b820191906000526020600020905b81548152906001019060200180831161046257829003601f168201915b5050505050905094509450945094505b509193509193565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106104d857805160ff1916838001178555610505565b82800160010185558215610505579182015b828111156105055782518255916020019190600101906104ea565b50610511929150610515565b5090565b61052f91905b80821115610511576000815560010161051b565b905600a165627a7a72305820030902f26f4ec7fc7f27262b5556ae47e4e6d2ca8bc95009b6be84f0dfb9326b0029\",\n" +"\t\"opcodes\": \"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55E DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x8C595A95 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xCC76B911 EQ PUSH2 0xE9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0xE7 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x219 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x101 PUSH1 0x4 CALLDATALOAD PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x162 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1A7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1DA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x207 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP4 DUP2 MSTORE CALLER PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP1 DUP4 SSTORE SWAP2 DUP1 MSTORE DUP3 MLOAD DUP1 MLOAD SWAP3 SWAP5 PUSH1 0x3 SWAP1 SWAP3 MUL PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP3 PUSH2 0x27F SWAP3 DUP5 SWAP3 ADD SWAP1 PUSH2 0x497 JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x1 DUP4 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x2D8 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x497 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 DUP1 SLOAD SWAP1 POP PUSH1 0x0 EQ ISZERO PUSH2 0x321 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 DUP2 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE DUP3 DUP2 MSTORE SWAP2 SWAP7 POP SWAP5 POP CALLER SWAP4 POP SWAP2 POP PUSH2 0x48F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP8 SWAP1 DUP2 LT PUSH2 0x32F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP3 SLOAD PUSH1 0x1 PUSH1 0x3 SWAP1 SWAP4 MUL SWAP1 SWAP4 ADD DUP3 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT SWAP9 DUP6 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD SWAP1 SWAP4 AND DUP8 SWAP1 DIV SWAP3 DUP4 ADD DUP7 SWAP1 DIV DUP7 MUL DUP2 ADD DUP7 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP7 POP DUP7 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP4 SWAP2 DUP6 ADD SWAP3 SWAP2 DUP6 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3F1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3C6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3F1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3D4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP9 POP DUP7 SWAP5 POP SWAP3 POP DUP5 ADD SWAP1 POP DUP3 DUP3 DUP1 ISZERO PUSH2 0x47F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x454 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x47F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x462 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMPDEST POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x4D8 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x505 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x505 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x505 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x4EA JUMP JUMPDEST POP PUSH2 0x511 SWAP3 SWAP2 POP PUSH2 0x515 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x52F SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x51B JUMP JUMPDEST SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SUB MULMOD MUL CALLCODE PUSH16 0x4EC7FC7F27262B5556AE47E4E6D2CA8B 0xc9 POP MULMOD 0xb6 0xbe DUP5 CREATE 0xdf 0xb9 ORIGIN PUSH12 0x2900000000000000000000 \",\n" +"\t\"sourceMap\": \"28:871:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28:871:0;;;;;;;\"\n" +"}";String abiFileName
= "leaveMsg.abi";String binFileName
= "leaveMsg.bin";SolidityUtils.generateABIAndBIN(abi
,bin
,abiFileName
,binFileName
);}
接著就會生成如下abi,bin文件。
(二)、利用abi,bin文件生成solidity的java代碼
public static void generateClass(String abiFile
,String binFile
,String generateFile
){String[] args
= Arrays.asList("-a",abiFile
,"-b",binFile
,"-p","","-o",generateFile
).toArray(new String[0]);Stream.of(args
).forEach(System.out
::println);SolidityFunctionWrapperGenerator.main(args
);}
測試代碼:
@Testvoid generateJavaFile(){String abiFile
= "src/main/resources/leaveMsg.abi";String binFile
= "src/main/resources/leaveMsg.bin";String generateFile
= "src/main/java/com/geminicx/myblog/blog/solidity/";SolidityUtils.generateClass(abiFile
,binFile
,generateFile
);}
(三)、(部署)調用合約上的函數
直接上代碼
@Testpublic void deplyContract() throws Exception{Web3j web3
= Web3j.build(new HttpService("https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161"));Credentials credentials
= Credentials.create("填入自己賬戶的私鑰");BigInteger gasPrice
= web3
.ethGasPrice().send().getGasPrice();LeaveMsg contract
= LeaveMsg.load("填入自己已部署的合約地址賬",web3
,credentials
,new StaticGasProvider(gasPrice
,BigInteger.valueOf(3000000L)));
RemoteFunctionCall<TransactionReceipt> setWord
= contract
.setWord("這是一條java測試留言11111111", "8888");TransactionReceipt transactionReceipt
= setWord
.sendAsync().get();String transactionHash
= transactionReceipt
.getTransactionHash();System.out
.println(transactionHash
);
如果不知道獲取測試url的請看以下步驟:
打開小狐貍錢包添加網絡:
在上圖就可以獲取各測試鏈url,有的時候可能需要科學上網。
最后附上一些官方文檔:
web3j官方文檔
solidity官方文檔
2022/4/15 更新:從數據上其實還是有很多同學對這一塊比較感興趣,筆者也對文章做了部分更正與補充。后續有時間可能會給之前一個比較簡單項目《永存的留言》再出個教程,因為最近各種事還挺忙,有興趣的可以先收藏碼一下~。
總結
以上是生活随笔為你收集整理的java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。