编写交易池智能合约

欢迎回来!您已准备好开始构建 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::optionsui::urlsui::transfersui::coinsui::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 编写合约。我们走吧!

quiz

解释一下transfer::public_transfer 的用途。