编写交易池智能合约
欢迎回来!您已准备好开始构建 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 编写合约。我们走吧!