AAVEToken
AAVE token 是一种兼容 ERC-20 的 token,增加了快照功能(用于治理余额跟踪),并集成了 EIP-2612 许可功能,允许无 gas 交易和一次交易批准/转移。
本部分将介绍 token 的技术层面
AAVE token 源码:https://github.com/aave/aave-token
已部署合约
主网:
Proxy Contracts | Address |
---|---|
AAVE Token | 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9 |
审计报告
Auditor | Audit Type |
---|---|
Consensys Diligence (AAVE token) | smart contract |
Certik (AAVE token) | smart contract |
Certora (AAVE token) | 属性验证 |
Methods
除了标准的 ERC20 代币功能(tansfer()
,balanceOf()
,allowance()
等)还提供以下功能:
permit
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external
允许用户允许其他用户(或合约)使用已签名的消息使用其资金。这实现了无 gas 交易和单一 approval/transfer 交易。
参数名称 | 类型 | 描述 |
---|---|---|
owner |
address | 资金的所有者 |
spender |
address | 资金的花费者 |
value |
uint256 | 允许 spender 使用的金额 |
deadline |
uint256 | 许可有效的截止时间戳。使用 type(uint).max 表示无截止日期 |
v |
uint8 | 签名参数 |
r |
bytes32 | 签名参数 |
s |
bytes32 | 签名参数 |
import { signTypedData_v4 } from 'eth-sig-util'
import { fromRpcSig } from 'ethereumjs-util'
// ... other imports
import AaveTokenAbi from "./AaveTokenAbi.json"
// ... setup your web3 provider
const aaveTokenAddress = "AAVE_TOKEN_ADDRESS"
const aaveTokenContract = new web3.eth.Contract(AaveTokenAbi, aaveTokenAddress)
const privateKey = "YOUR_PRIVATE_KEY_WITHOUT_0x"
const chainId = 1
const owner = "OWNER_ADDRESS"
const spender = "SPENDER_ADDRESS"
const value = 100 // Amount the spender is permitted
const nonce = 1 // The next valid nonce, use `_nonces()`
const deadline = 1600093162
const permitParams = {
types: {
EIP712Domain: [
{ name: "name", type: "string" },
{ name: "version", type: "string" },
{ name: "chainId", type: "uint256" },
{ name: "verifyingContract", type: "address" },
],
Permit: [
{ name: "owner", type: "address" },
{ name: "spender", type: "address" },
{ name: "value", type: "uint256" },
{ name: "nonce", type: "uint256" },
{ name: "deadline", type: "uint256" },
],
},
primaryType: "Permit",
domain: {
name: "Aave Token",
version: "1",
chainId: chainId,
verifyingContract: aaveTokenAddress,
},
message: {
owner,
spender,
value,
nonce,
deadline,
},
}
const signature = signTypedData_v4(
Buffer.from(privateKey, "hex"),
{ data: permitParams }
)
const { v, r, s } = fromRpcSig(signature)
await aaveTokenContract.methods
.permit({
owner,
spender,
value,
deadline,
v,
r,
s
})
.send()
.catch((e) => {
throw Error(`Error permitting: ${e.message}`)
})
_nonces()
function _nonces(address owner) public
返回调用permit()
时要提交的下一个有效 nonce
event SnapshotDone
event SnapshotDone(address owner, uint128 oldValue, uint128 newValue)
在每次 transfer
、mint
(具有有效的 to
地址)和 burn
(具有有效的 from
地址)时触发的事件。
快照用于监管余额跟踪。
参数名称 | 类型 | 描述 |
---|---|---|
owner |
address | AAVE token 的持有者 |
oldValue |
uint128 | 执行操作之前的值 |
newValue |
uint128 | 执行操作之后的值 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Q1ngying!