Magician-ContractsTools 发布,有了它用 Java 调用智能合约更加方便了
此版本为首次发布,所以也没什么更新的点,就简单介绍一下这个软件吧。
Magician-ContractsTools是一个用于调用智能合约的工具包,你可以非常容易地在Java程序中调用智能合约进行查询和写入操作。
有三个内置的标准合约模板,分别是ERC20、ERC721和ERC1155,如果你需要调用这三个合约中的标准函数,可以帮助你非常快速地完成工作。除了内置的合同模板外,如果你需要调用自定义的合同函数也是很容易的,以后我们还会继续增加标准模板。
此外,还有InputData解码和ETH查询和转移的工具
计划支持三种链,ETH(BSC、POLYGON等)、SOL和TRON
导入依赖
<dependency> <groupId>com.github.yuyenews</groupId> <artifactId>Magician-ContractsTools</artifactId> <version>1.0.0</version> </dependency> <!-- This is the logging package, you must have it or the console will not see anything, any logging package that can bridge with slf4j is supported --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.7.12</version> </dependency>
合约查询 以及 写入
String privateKey = ""; // 私钥 Web3j web3j = Web3j.build(new HttpService("https://data-seed-prebsc-1-s1.binance.org:8545/")); // 链的RPC地址 String contractAddress = ""; EthContractUtil ethContractUtil = EthContractUtil.builder(web3j); // 查询 List<Type> result = ethContractUtil.select( contractAddress, // 合约地址 EthAbiCodecTool.getInputData( "balanceOf", // 要调用的方法名称 new Address(toAddress) // 方法的参数,如果有多个,可以继续传入下一个参数 ), // 要调用的方法的inputData new TypeReference<Uint256>() {} // 方法的返回类型,如果有多个返回值,可以继续传入下一个参数 ); // 往合约里写入数据 // gasPrice,gasLimit 两个参数,如果想用默认值可以不传,或者传null // 如果不传的话,两个参数都必须不传,要传就一起传, 如果设置为null的话,可以一个为null,一个有值 SendResultModel sendResultModel = ethContractUtil.sendRawTransaction( senderAddress, // 调用者的地址 contractAddress, // 合约地址 privateKey, // senderAddress的私钥 new BigInteger("1200000"), // gasPrice,如果想用默认值 可以直接传null,或者不传这个参数 new BigInteger("800000"), // gasLimit,如果想用默认值 可以直接传null,或者不传这个参数 EthAbiCodecTool.getInputData( "transfer", // 要调用的方法名称 new Address(toAddress), // 方法的参数,如果有多个,可以继续传入下一个参数 new Uint256(new BigInteger("1000000000000000000")) // 方法的参数,如果有多个,可以继续传入下一个参数 ) // 要调用的方法的inputData ); sendResultModel.getEthSendTransaction(); // 发送交易后的结果 sendResultModel.getEthGetTransactionReceipt(); // 交易成功上链后的结果
合约模板
目前只有三种模板,后面会继续增加,为了节约篇幅 这里只展示ERC20,详情可以访问官网了解
调用ERC20合约
查询
// 调用合约的 totalSupply 函数 BigInteger total = erc20Contract.totalSupply(); // 调用合约的 balanceOf 函数 BigInteger amount = erc20Contract.balanceOf("0xb4e32492E9725c3215F1662Cf28Db1862ed1EE84"); // 调用合约的 allowance 函数 BigInteger amount = erc20Contract.allowance("0xb4e32492E9725c3215F1662Cf28Db1862ed1EE84", "0x552115849813d334C58f2757037F68E2963C4c5e");
写入
// 调用合约的 transfer 函数 SendResultModel sendResultModel = erc20Contract.transfer( "0x552115849813d334C58f2757037F68E2963C4c5e", // 转账接收人 new BigInteger("1000000000000000000"), // 转账金额 "0xb4e32492E9725c3215F1662Cf28Db1862ed1EE84", // 调用者的地址 "", // 调用者的私钥 null, // gasPrice,如果传null,自动使用默认值 null // gasLimit,如果传null,自动使用默认值 ); sendResultModel.getEthSendTransaction(); // 发送交易后的结果 sendResultModel.getEthGetTransactionReceipt(); // 交易成功上链后的结果 // 调用合约的 transferFrom 函数 SendResultModel sendResultModel = erc20Contract.transferFrom( "0xb4e32492E9725c3215F1662Cf28Db1862ed1EE84", // 转账付款人 "0x552115849813d334C58f2757037F68E2963C4c5e", // 转账接收人 new BigInteger("1000000000000000000"), // 转账金额 "0xb4e32492E9725c3215F1662Cf28Db1862ed1EE84", // 调用者的地址 "", // 调用者的私钥 null, // gasPrice,如果传null,自动使用默认值 null // gasLimit,如果传null,自动使用默认值 ); sendResultModel.getEthSendTransaction(); // 发送交易后的结果 sendResultModel.getEthGetTransactionReceipt(); // 交易成功上链后的结果 // 调用合约的 approve 函数 SendResultModel sendResultModel = erc20Contract.approve( "0x552115849813d334C58f2757037F68E2963C4c5e", // 被授权人 new BigInteger("1000000000000000000"), // 授权金额 "0xb4e32492E9725c3215F1662Cf28Db1862ed1EE84", // 调用者的地址 "", // 调用者的私钥 null, // gasPrice,如果传null,自动使用默认值 null // gasLimit,如果传null,自动使用默认值 ); sendResultModel.getEthSendTransaction(); // 发送交易后的结果 sendResultModel.getEthGetTransactionReceipt(); // 交易成功上链后的结果
InputData 编解码
// 编码 String inputData = EthAbiCodecTool.getInputData( "transfer", // 方法名 new Address(toAddress), // 参数1 new Uint256(new BigInteger("1000000000000000000")) // 参数2,如果还有其他参数,可以继续传入下一个 ); // 解码 List<Type> result = EthAbiCodecTool.decoderInputData( "0x" + inputData.substring(10), // 去除方法签名的inputData new TypeReference<Address>() {}, // 被编码的方法的参数1 类型 new TypeReference<Uint256>() {} // 被编码的方法的参数2 类型, 如果还有其他参数,可以继续传入下一个 ); for(Type type : result){ System.out.println(type.getValue()); } // 获取方法签名,其实就是inputData的前十位 String functionCode = EthAbiCodecTool.getFunAbiCode( "transfer", // 方法名 new Address(toAddress), // 参数1,值随意传,反正我们要的方法签名,不是完整的inputData new Uint256(new BigInteger("1000000000000000000")) // 参数2,值随意传,反正我们要的方法签名,不是完整的inputData,如果还有其他参数,可以继续传入下一个 );
主链币查询以及转账
String privateKey = ""; // 私钥 Web3j web3j = Web3j.build(new HttpService("https://data-seed-prebsc-1-s1.binance.org:8545/")); // 链的RPC地址 // 这种方式是单例的 EthHelper ethHelper = MagicianWeb3.getEthBuilder().getEth(web3j); // 如果你想创建多个EthHelper对象,可以用这种方式 EthHelper ethHelper = EthHelper.builder(web3j); // 余额查询 BigInteger balance = ethHelper.balanceOf(fromAddress); // 转账 TransactionReceipt transactionReceipt = ethHelper.transfer( toAddress, privateKey, BigDecimal.valueOf(1), Convert.Unit.ETHER );
官网地址

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
WoTerm v9.24.1 发布
1.SFTP模块优化。 》》增加了简易的下载队列管理功能,支持多个文件夹及文件列表的上传下载功能。 》》增加断点续传的功能。 》》增加了多文件夹及文件的删除功能。 》》增加文件夹记忆功能,进入最近的文件夹。 2.增加SSH终端与SFTP助手的目录同步功能。
- 下一篇
ERD Online 4.0.4 发布,元数据在线建模(免费、私有部署)
❝ fix(erd): 修改表名、模块名自定义提示 fix(erd): 支持自定义表名显示格式 fix(erd): 升级ant到5.0.1版本 fix(erd): 修复PDMan导入类型列为空 fix(erd): 增加类型列宽度,避免类型显示不全 fix(erd): 修复表设计报undefine异常 fix(erd): 修复版本比对,出现杂乱sql fix(erd): 修复表字段使用了数据库关键字导致不能执行 fix(erd): 修复同步数据源,获取的sql脚本不正确 fix(erd): 修复数据库逆向解析的模块,修改结构导致表清空 fix(erd): 修复无法重建基线bug,修复初始化基线sql脚本不一致问题 fix(erd): 修复模板编辑页光标会随着输入消失 fix(erd): 修改默认字段为小写 fix(erd): 增加本地启动环境变量 ❞ 变化一览 表名显示支持自定义,可以显示英文+中文 修复模板渲染bug 修复版本变更信息不准确 版本列表 版本比对 交流渠道 官方论坛:https://www.zerocode.net.cn/ ERD Online文档:https://po...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境