4_Sui+Move核心概念

Sui Move的 Object基础概念

  • Sui Move 是以Object为核心
  • Sui的交易输入和输出都是 Object
  • Object是Sui的基本存储单元
  • Object即 struct
  • Sui 的 Object 必须包含一个 id: UID字段, 并且设置key特性
  • Sui中每个Object都必须有一个 owner, owner可以是:
    • 一个地址
    • 其他object
    • Object是”shared”

Object的所有权

https://github.com/sui-foundation/sui-move-intro-course/blob/main/unit-two/lessons/2_ownership.md

在Sui Move中,Object一共有4种所有权:

  • Owned: owned object交易不需要全局排序
    • Owned by an address
    • Owned by another object
  • Shared
    • Shared immutable:
      • 没有owner, 所有人都不可修改
    • Shared mutable:
      • 任何人都可以读取和修改, shared object交易需要进行全局排序

3_HelloWorld

基础理论知识

  • Sui以Object(对象)为核心(Object有点类似Bitcoin中的UTXO)

  • Sui标准库发布在0x2下面

  • 发布的模块是不可变Object(immutable object),

    • 不可变Object:
      • 不能被修改+不能被转移+不能被删除
      • 任何人都可以使用
  • 结构体的特性(abilities)

    • copy: value can be copied (or cloned by value)
    • drop: value can be dropped by the end of the scope
    • key: value can be used as a key for global storage operations
    • store: value can be held inside a struct in global storage
  • 函数可见性:

    • private: the default visibility of a function; it can only be accessed by functions inside the same module
    • public: the function is accessible by functions inside the same module and by functions defined in another module
    • public(package): the function is accessible by functions of modules inside the same package

HelloWorld

  • 创建move项目: sui move new hello_world

  • Move.toml中的 rev = "framework/testnet" 改为 rev = "framework/devnet"

  • source/hello_world.move 输入完整代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    module hello_world::hello_world {

    use std::string;

    // 自定义结构体
    /// An object that contains an arbitrary string
    public struct HelloWorldObject has key, store {
    id: UID,
    /// A string contained in the object
    text: string::String
    }

    #[lint_allow(self_transfer)]
    public fun mint(ctx: &mut TxContext) {
    let object = HelloWorldObject {
    id: object::new(ctx),
    text: string::utf8(b"hello fucker!")
    };

    // 将 对象转给调用者
    transfer::public_transfer(object, tx_context::sender(ctx));
    }

    }
  • 编译move代码: sui move build

  • 发布package: sui client publish --gas-budget 20000000 ./

    • 可以看到输出之后的package ID
  • export PACKAGE_ID=xxx

  • 调用package : sui client call --function mint --module hello_world --package $PACKAGE_ID --gas-budget 10000000

2_Sui入门

参考: https://github.com/sui-foundation/sui-move-intro-course/blob/main/unit-one/lessons/1_set_up_environment.md

安装

  • 安装 sui

    1
    cargo install --locked --git https://github.com/MystenLabs/sui.git --branch devnet sui
  • vscode 安装 move-analyzer插件

    1
    cargo install --git https://github.com/move-language/move move-analyzer --features "address20"

初始化

  • sui client envs
    • devnet: https://fullnode.devnet.sui.io:443
    • 0 for ed25519

安装 Sui 插件钱包

https://chromewebstore.google.com/detail/sui-wallet/opcgpfmipidbgpenhmajoajpbobppdil?pli=1

获取测试币

sui client faucet

每次可以获取 10 SUI

浏览器查看地址

https://suiscan.xyz/devnet/account/0x163813fb76d72bf46451ddfad78b35700198bf8eb8f3d3dee596726c2b01515b

查看地址

  • 查看地址: sui client addresses
  • 查看活跃地址: sui client active-address
  • 获取余额(Sui上叫做gas object): sui client gas

ChatGPT底层算法Transformer

http://lib.ia.ac.cn/news/newsdetail/68571

Transformer算法机制:

Transformer核心三个步骤:

  1. 编码(Embedding)
  2. 定位 (Positional Encoding)
  3. 自注意力机制(Self-Attention)

以翻译为例: 将 “I love you” 翻译为中文,

  • 第一步——编码(Embedding): 将 “I love you” 中每个单词进行编码成 512维向量(实际维度可能更高)
    • 可理解为512高维空间中的一个点
  • 第二步——定位(Positional encoding): 将每个单词的向量映射到一个新的高维向量
    • 高维向量包含了单词在句子中的“位置”信息
  • 第三步——自注意力机制(Self-Attention): 通过一个Attention(Q,K,V)算法, 将每个单词向再变换为一个更高维的向量
    • 高维向量包含了单词与句子中其他单词的关系

总结

  • 深度学习算法,如Transformer,在工程实践中表现很好,但是为什么好,目前缺乏理论依据

    • ChatGPT为什么那么牛逼,科学家也解释不了,反正就是大力出奇迹
  • 智能可用高维空间中的路径进行量化(可计算化)

    • 智能=高维空间中的路径
    • 智慧=高维空间中的路径

人月神话

https://github.com/youngqqcn/expert_readed_books/blob/master/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D.pdf

  • 开发成本随着人数和时间的不同,有很大的变化。

  • 用人月来衡量工作是非常危险的,因为它建立在人与人之间不需要相互交流的前提

  • 在错综复杂的任务中,沟通和交流的工作量非常大,如果添加更多的人手,实际会延长进度

  • 不要进度一落后,就想着加人

  • 少数人思考确定系统的方向,多数人来解决实际实现问题

  • 巴比伦塔为什么失败?

    • 两个方面——交流,以及交流的结果——组织
    • 鼓励网形交流,而不是树形
  • 团队组织的目的是减少不必要交流和合作的数量,因此良好的团队组织是解决上述交流问题的关键措施。 减少交流的方法是人力划分(division of labor)和限定职责范围(specialization of function)

  • 每棵子树所必须具备的基本要素:

    • 任务(a mission)
    • 产品负责人(a producer)
    • 技术主管和结构师(a technical director or architect)
    • 进度(a schedule)
    • 人力的划分(a division of labor)
    • 各部分之间的接口定义(interface definitions among the parts)
  • 产品负责人的角色是什么?

    • 他组建团队,划分工作及制订进度表。他要求,并一直要 求必要的资源。这意味着他主要的工作是与团队外部,向上和水平地沟通。他建立团队内部 的沟通和报告方式。最后,他确保进度目标的实现,根据环境的变化调整资源和团队的构架。
  • 技术主管的角色是什么?

    • 他对设计进行构思,识别系统的子部分,指明从外部看 上去的样子,勾画它的内部结构。他提供整个设计的一致性和概念完整性;他控制系统的复 杂程度。当某个技术问题出现时,他提供问题的解决方案,或者根据需要调整系统设计。用 Al Capp 所喜欢的一句谚语,他是“攻坚小组中的独行侠”(inside-man at the skunk works.)。 他的沟通交流在团队中是首要的。他的工作几乎完全是技术性的。
  • 产品负责人和技术主管是同一个人

    • 这种方式非常容易应用在很小型的队伍中,可能 是三个或六个开发人员。在大型的项目中则不容易得到应用。原因有两个:
      • 第一,同时具有 管理技能和技术技能的人很难找到。思考者很少,实干家更少,既是思考者又是实干家的太少了。
      • 第二,大型项目中,每个角色都必须全职工作,甚至还要加班。对负责人来说,很难在承担全部管理责任的同时,还能抽出时间进行技术工作。对技术主管来说,很难在保证设 计的概念完整性,没有任何妥协的前提下,担任管理工作。
  • 如何根据一个严格的进度表来控制项目?

    • 第一个步骤是制订进度表。进度表上的每一件事,被称为“里程碑”,它们都有一个日期。
      • 里程碑的选择只有一个原则,那就是,里程碑必须是具体的、特定的、可度量的事件,能够进行清晰定义
    • 保持进取心, 必须关心每一天的滞后,它们是大灾祸的基本组成元素
    • 及时反馈问题
      • 减少角色冲突: 老板只了解信息,不越俎代庖,避免经理失去权威;经理及时上报,并且提出解决方案,让老板安心。
      • 有了解真相的评审机制。通过关键路径图、明确里程碑、周会多方面来评审是否存在问题。
  • 项目管理主要是对人的关注和管理

  • Copyrights © 2021-2025 youngqqcn

请我喝杯咖啡吧~