链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

java以太坊库web3j文档:应用二进制接口即ABI简介
清风慕竹
2021-10-09 21:36:53

web3j开发dapp的应用二进制接口(ABI)是在Ethereum以太坊使用java开发的智能合约的数据编码方案。ABI中定义的类型与solidity编写智能合约时所遇到的类型完全相同,即uint8...uint256,int8...int256,布尔bool,字符串string等等。

web3j中的ABI模块提供了对ABI规范的完全支持,并且包括:

  • 所有ABI类型的Java实现,包括到原生Java类型的转换
  • 函数与事件支持
  • 大量单元测试

类型映射

web3j中使用的原生Java到ABI类型映射如下:

  • boolean -> bool
  • BigInteger -> uint/int
  • byte[] -> bytes
  • String -> string and address types
  • List<> -> dynamic/static array BigInteger类型必须用于数字类型,因为Ethereum以太坊中的数字类型是256位整数值。

Fixed point types固定点类型已被定义为以太坊定义了,但目前在Solidity还没有实现,因此Web3j目前不支持它们(它们是在3.x之前提供的)。一旦在Solidity可用,它们将被重新引入到Web3J的ABI模块中。

有关在Java中使用ABI类型的更多信息,请参考Solidity smart contract wrappers

ABI的进一步细节

可以参阅各种ABI单元测试的编码/解码的例子。

完整的ABI规范文件可以看 Solidity documentation。

依赖关系

ABI一个非常轻量级的模块,唯一的第三方依赖是 Bouncy Castle,用于hash加密 (Spongy Castle on Android)。

最后希望java和安卓开发者,在JVM或Android上有以太坊ABI合作的项目时会选择使用这个模块,而不是再编写自己的实现。

合作伙伴