热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MagicianContractsTools发布,有了它用Java调用智能合约更加方便了

magician,contractstools,发布,有了,它,用,java,调用,智能,

此版本为首次发布,所以也没什么更新的点,就简单介绍一下这个软件吧。

Magician-ContractsTools是一个用于调用智能合约的工具包,你可以非常容易地在Java程序中调用智能合约进行查询和写入操作。

有三个内置的标准合约模板,分别是ERC20、ERC721和ERC1155,如果你需要调用这三个合约中的标准函数,可以帮助你非常快速地完成工作。除了内置的合同模板外,如果你需要调用自定义的合同函数也是很容易的,以后我们还会继续增加标准模板。

此外,还有InputData解码和ETH查询和转移的工具

计划支持三种链,ETH(BSC、POLYGON等)、SOL和TRON

导入依赖

  com.github.yuyenews Magician-ContractsTools 1.0.0    org.slf4j slf4j-jdk14 1.7.12 

合约查询 以及 写入

 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 result = ethContractUtil.select( contractAddress, // 合约地址 EthAbiCodecTool.getInputData( "balanceOf", // 要调用的方法名称 new Address(toAddress) // 方法的参数,如果有多个,可以继续传入下一个参数 ), // 要调用的方法的inputData new TypeReference() {} // 方法的返回类型,如果有多个返回值,可以继续传入下一个参数 ); // 往合约里写入数据 // 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 result = EthAbiCodecTool.decoderInputData( "0x" + inputData.substring(10), // 去除方法签名的inputData new TypeReference
() {}, // 被编码的方法的参数1 类型 new TypeReference() {} // 被编码的方法的参数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 );

官网地址

https://magician-io.com


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
手机用户2602908893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有