地址常量在solidity语言的使用

以太坊虚拟机地址为是20字节,而波场虚拟机解析地址为21字节。

1. 地址转换

在solidity中使用的时候需要对波场地址做如下处理(推荐):

/**
  * @dev convert uint256 (HexString add 0x at beginning) tron address to solidity address type
  * @param  tronAddress uint256 tronAddress, begin with 0x, followed by HexString
  * @return Solidity address type
  */
     
function convertFromTronInt(uint256 tronAddress) public view returns(address){
      return address(tronAddress);
}

这个和在以太坊中其他类型转换成address类型语法相同。

2. 地址判断

solidity中有地址常量判断,如果写的是21字节地址编译器会报错,只用写20字节地址即可,如:

function compareAddress(address tronAddress) public view returns (uint256){
     // if (tronAddress == 0x41ca35b7d915458ef540ade6068dfe2f44e8fa733c) { // compile error
     if (tronAddress == 0xca35b7d915458ef540ade6068dfe2f44e8fa733c) { // right
          return 1;
     } else {
          return 0;
     }
}

tronAddress从wallet-cli传入是0000000000000000000041ca35b7d915458ef540ade6068dfe2f44e8fa733c这个21字节地址,即正常的波场地址时,是会返回1的,判断正确。

3. 地址赋值

solidity中有地址常量的赋值,如果写的是21字节地址编译器会报错,只用写20字节地址即可,solidity中后续操作直接利用这个20位地址,波场虚拟机内部做了补位操作。如:

function assignAddress() public view {
     // address newAddress = 0x41ca35b7d915458ef540ade6068dfe2f44e8fa733c; // compile error
     address newAddress = 0xca35b7d915458ef540ade6068dfe2f44e8fa733c;
     // do something
}