web3j开发dapp应用二进制接口即ABI简介

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合作的项目时会选择使用这个模块,而不是再编写自己的实现。

  • web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j开发详解。
  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。

汇智网原创,转载请标明出处。