我的 Starknet 合约使用 cairo v2,但 starknet 中的 ETH 代币是使用 cairo v0 部署的。但 Cairo v0 和 Cairo v2 在语法和数据类型上是两个截然不同的版本。那么如何在开罗starknet合约v2中转账ETH
我们需要使用
IERC20Camel
与驼峰合约进行交互(许多 ERC20 合约都是如此)。
#[starknet::interface]
trait IERC20Camel<TState> {
fn totalSupply(self: @TState) -> u256;
fn balanceOf(self: @TState, account: ContractAddress) -> u256;
fn allowance(self: @TState, owner: ContractAddress, spender: ContractAddress) -> u256;
fn transfer(ref self: TState, recipient: ContractAddress, amount: u256) -> bool;
fn transferFrom(
ref self: TState, sender: ContractAddress, recipient: ContractAddress, amount: u256
) -> bool;
fn approve(ref self: TState, spender: ContractAddress, amount: u256) -> bool;
}
let erc20_dispatcher = IERC20Dispatcher { contract_address };
transferFrom
获得批准后erc20_dispatcher.transferFrom(sender, recipient, amount);
approve
在调用
transferFrom
(或 transfer_from
)之前,您的合约需要获得您想要转移的代币的批准。
这通常通过多次调用来完成。因此,当您要求客户端签署最终调用 transferFrom
的交易时,您可以在同一交易中在其之前添加对 approve
的调用。