1
2
3
4
5
6
7
let abc:u64 =64;
let mut a:u64 =4;
let b:u64 = 111_111_111;
let b:u64 = 0x00;
let c:u32 = 12;
let d:u64 = b+(c as u64);

  • move 只有六个无符号整数
  • 没有负数和小数
    • 与前端以约定的方式设定负数
  • 不指定默认32位
  • 方便可读,能加下划线
  • 可以有其他进制
    ![[Pasted image 20241117144150.png]]
  • address 一个32字节的整数
    • 不够会自动补充0
    • 也可在toml文件中写默认地址
      1
      let address1:address = @0x0000000032 //0x00000...032
      1
      module mod::a;
      mod为地址
      ![[Pasted image 20241117150456.png]]
      entry
  • 命令行,网页端可以调用
    init
  • ![[Pasted image 20241117151045.png]]

AdminCap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module design::admin;

use sui::transfer::transfer;
public struct AdminCap has key {

    id: UID,

}
public struct Door has drop {

    status: bool,

}
fun init(ctx: &mut TxContext) {

    let admin = AdminCap { id: object::new(ctx) };

    transfer(admin, ctx.sender());

}
  • 一个对象,传入使用的函数
  • 权限控制

Witness

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
module design::wit;

use std::ascii::{string, String};
use sui::transfer::transfer;

public struct Mi has drop {}
public struct House has key {

    id: UID,

    name: String,

}



public fun create_house(_: Mi, ctx: &mut TxContext): House {

    House { id: object::new(ctx), name: string(b"dd") }

}

fun init(ctx: &mut TxContext) {
    let mi = Mi {};
    let house = create_house(mi, ctx);
    transfer(house, ctx.sender())

}

-没有字段,只有drop能力

  • 一次性见证
  • OTW(一次性见证)
    • 只能被创建一次
    • 没有字段,只有drop能力
    • 模块名大写

hot-potato

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
module design::potato;

use sui::coin::Coin;

use sui::transfer::public_transfer;



public struct Receipt {

    price: u64,

}

public struct POTATO has drop {}

public struct House has key {

    id: UID,

    model: u8,

}



public fun buy_house(model: u8, ctx: &mut TxContext): (Receipt, House) {

    (Receipt { price: model as u64*1000 }, House { id: object::new(ctx), model })

}



public fun pay_receipt(receipt: Receipt, payment: Coin<POTATO>) {

    let Receipt { price } = receipt;

    public_transfer(payment, @0x1111);

}
  • 结构体没有任何能力
  • 必须依靠外部创建结构体
  • 必须依靠外部销毁结构体

常量

***注意:没有String

  • const Name:Type = Value
  • type
    • u8
    • u16
    • u32
    • u64
    • u128
    • u258
    • bool
    • address
      • 0x…….
    • vector –数组

作用

  • 消除模版代码
  • 兼容未来的数据类型
  • 未被使用的泛型,做类型关联

使用

  • 在使用前声明泛型类型
  • 没使用的泛型要加phantom前缀

copy

  • 被修饰的值可以被复制
    drop
  • 被修饰的值在作用域结束时可以被丢弃
  • drop能力的结构体中的数据类型都要有drop能力
    • UID没有drop能力,所以Object没有drop
  • 基本数据类型被默认了drop能力
    key
  • 被修饰的值可以作为键值对全局状态进行访问
    store
  • 被修饰的值可以被存储到其他结构体

逐个分析

  • 只有key
    • 定义对象
    • 自定义转移规则
    • 对象有全局ID,可以被全局存储和查找
  • 只有store
    • 被修饰的值可以被存储到其他结构体
  • 只有drop
    • 被修饰的值在离开作用域时会被自动析构(删除)
    • 基本数据类型默认实现了drop
  • key,store
    • 对象可以被任意转移,不被转移规则限制
      • 可以用public_transfer方法跳过if等限制
    • 对象有全局ID,可以被全局存储和查找
  • 没有任何能力
    • 只在当前事务中
  • key和drop不能同时存在
    • 全局存储和丢失有冲突
  • key和copy也不能同时存在
    • key的UID具有唯一性
  • copy和drop
    • 做日志
      • emit

ctx类型只能放在最后,不然会报错

0x1 - 标准库 的地址(别名 std)
0x2 - Sui 框架 的地址(别名 sui)
0x5 - SuiSystem 对象的地址
0x6 - 系统 Clock 对象 的地址
0x8 - 系统 Random 对象的地址
0x403 - DenyList 系统对象的地址

  • 在一个交易必须完成借和还
  • 无需抵押
  • 不还一定报错
  • 只要用于套利
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    module flashlend::flashlend;

    use sui::balance::{Self, Balance};
    use sui::coin::{Self, Coin};
    use sui::sui::SUI;
    use sui::transfer::transfer;
    public struct Flashlend has key {
        id: UID,
        val: Balance<SUI>,
    }



    public struct AdminCap has key {

        id: UID,

    }



    public struct Receipt {

        val: u64,

    }



    fun init(ctx: &mut TxContext) {

        let flash_lend = Flashlend { id: object::new(ctx), val: balance::zero() };

        let admin = AdminCap { id: object::new(ctx) };

        transfer(admin, ctx.sender());

    }



    public fun lend(pool: &mut Flashlend, amout: u64, ctx: &mut TxContext): (Receipt, Coin<SUI>) {

        let bal = pool.val.split(amout);

        let sui_coin = coin::from_balance(bal, ctx);

        let receipt = Receipt { val: amout+amout/100 };

        (receipt, sui_coin)

    }



    public fun repay(pool: &mut Flashlend, re_amout: Receipt, in: Coin<SUI>) {

        let in_amout = coin::value(&in);

        assert!(in_amout == re_amout.val, 0x11);

        let bal = coin::into_balance(in);

        pool.val.join(bal);

        let Receipt { val } = re_amout;

    }

    #[test]
    //伪代码
    fun handle() {

        let (sui, re) = lend();



        repay(pool, re_amout, in);

    }
  • 面向资产

  • 安全

  • 用于大规模系统

  • 借鉴Rust语法

  • rust语言开发

  • 内核从零开始,不是基于rust

  • ***智能合约编程语言(通用)
    - 定义资产
    - USD
    - NFT
    - 操作资产
    - 增删改查
    - 增加供应
    - 减少供应
    - 改变货币
    - 查找货币来源等
    - 权限控制——最复杂
    - 限制访问
    - 转移权限
    - 与其他语言的不同
    - 每次运行程序都是一个完整的事务,失败后自动回滚
    - 不用考虑并发,底层自动处理
    - 和链的结合屏蔽了数据层的概念, 语言本身的操作就是数据的操作

标题

1用多少个#多少级标题

加重

**在中间 **
高亮
==== 中间
==1==
斜体
** 中间

引用

ddasda

无序列表

  • ddd
  • 用减号和空格
    • dd
      有序列表dad
    1. aa

任务列表

  • ddsada
  • d
    加粗且斜体
    ddd
    三个星号

表格

|_dsda _|

代码

反引号
`
代码块

1
print(ddd)

三个反引号
隐藏文本
两个百分号%%试试%%
链接
名称
中括号加小括号

warlus白皮书

  • ![[Pasted image 20241215135647.png]]

现有的去中心存储

  • IPFS,Arwere
    • 完全复制
  • 低效
  • 应用场景
    ![[Pasted image 20241215143921.png]]