编写交易池智能合约
欢迎回来!您已准备好开始构建 dApp。那么为什么还要等呢,让我们直接进入编码。
交易池智能合约
导航到 sources/eth.move
。
第一个任务是为我们的水龙头创建一种货币,我将其命名为 ETH
,您可以随意命名。
#![allow(unused)] fn main() { use std::option; use sui::url; use sui::transfer; use sui::coin; use sui::tx_context::{Self, TxContext}; public struct ETH has drop {} }
- 该代码首先导入必要的库(
std::option
、sui::url
、sui::transfer
、sui::coin
、sui::tx_context::{Self, TxContext}
)。 - 接下来,使用放置功能定义名为
ETH
的结构。该结构将用作某些操作的见证。
#![allow(unused)] fn main() { fun init(witness: ETH, ctx: &mut TxContext) { let (treasury_cap, metadata) = coin::create_currency<ETH>( witness, 9, b"ETH", b"ETH Coin", b"Ethereum Native Coin", option::some(url::new_unsafe_from_bytes(b"https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png")), ctx ); transfer::public_transfer(treasury_cap, tx_context::sender(ctx)); transfer::public_share_object(metadata); } }
- 定义了模块初始化函数 (
init
),它采用ETH
类型的见证和对TxContext
的可变引用。 - 在
init
函数内部:coin::create_currency
被调用以创建具有特定参数的新货币(ETH Coin),例如见证人、小数位、符号、名称、图标 URL 和可选元数据。- 然后,使用从
create_currency
获取的财务能力和元数据将财务能力传输给部署者 (transfer::public_transfer
) 并公开共享元数据 (transfer::public_share_object
)。
#![allow(unused)] fn main() { #[test_only] public fun init_for_testing(ctx: &mut TxContext) { init(ETH {}, ctx); } }
- 最后,定义测试函数。在本例中,有一个仅测试的初始化函数 (
init_for_testing
),用#[test_only]
注释。此函数使用虚拟ETH
见证函数调用主初始化函数 (init
) 以进行测试。
完整代码
eth.move
的完整代码是:
module dex::eth {
use std::option;
use sui::url;
use sui::transfer;
use sui::coin;
use sui::tx_context::{Self, TxContext};
public struct ETH has drop {}
fun init(witness: ETH, ctx: &mut TxContext) {
let (treasury_cap, metadata) = coin::create_currency<ETH>(
witness,
9,
b"ETH",
b"ETH Coin",
b"Ethereum Native Coin",
option::some(url::new_unsafe_from_bytes(b"https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png")),
ctx
);
transfer::public_transfer(treasury_cap, tx_context::sender(ctx));
transfer::public_share_object(metadata);
}
#[test_only]
public fun init_for_testing(ctx: &mut TxContext) {
init(ETH {}, ctx);
}
}
小结
在本课中,我们编写了用于创建新货币的代码。在下一课中,我们将为 USDC 编写合约。我们走吧!