跳到主要内容

容器操作

图标

ContainerOperate_image1.png

功能

取放容器中的内容(资源或实体

要点

建议

容器操作组件与容器(数据元素)、容器操作链固定配套使用,可结合相关内容理解,建议首先阅读容器章节,理解资源的概念

理解和应用

  • 可以表达对可生产消耗资源的出库/消费/支付和入库/生产/收入

    例子
    • 游戏中的农民将收获的粮食放入仓库,粮食就是资源,库存即为资源容器,粮食入库即为添加资源进入资源容器的操作
    • DeFi领域中EOA用户连接钱包后以3000$USDC与DEX交换得到1$ETH,对于钱包容器而言,同时支出$USDC和收入$ETH,对DEX流动性池容器而言,同时支出$ETH和收入$USDC,这个交换过程也是容器操作
  • 也可以表达对可重复使用资源占用申请与释放

    例子

    车辆进入停车场,本质上可以看做先"申请"车位资源,获得后才能进入,离开时"释放"车位,对于停车场资源容器来说,车位即为其中资源、申请和释放即为对容器的资源操作

提示:DeFi领域建模中的容器操作

我们通常将各种ERC20代币视作资源,将用户钱包和DEX流动性池视作资源容器,这样就能轻松管理EOA账户地址和智能合约地址的各种代币余额,而不是完全照搬ERC20全局账本的模式,从而实现方便的模拟交易和对系统本质原理更加直观的呈现和理解。

图形建模语法

  • 容器操作本身作为一个流程步骤组件以后继链连接在流程中

  • 操作链连接容器到操作对象上,容器操作链是单向的,不同方向表示取放

    ContainerOperate_image2.png

建议:如何更好的阅读相关模型?

因为当流程Trigger抵达资源操作时才会触发其运行,所以建议阅读流程时,先沿后继链阅读整个流程主干逻辑,再关注资源操作的相关信息,即先读主干、再读分支,从而避免在此处因为同时存在多种流程链和组件对象而造成困惑。

  • 每条操作链只能连接一个容器,但多条链可以连在一个容器操作上

组件无输出数据

资源操作运行机制

注释:对资源容器的操作简称资源操作。

基本

  • 系统按资源种类(容器的键)分门别类的操作、互不相关
  • 资源操作运行的关键信息
    • 取放方向

      来自容器操作链的方向,当操作链从容器操作指向容器时代表放入容器资源,反之代表从容器中取出资源

    • 取放资源的种类和数量

      来自容器操作链的属性面板设定

    • 是否为交换模式

      根据容器操作对象的交换模式设定

    • 容器性质和状态

      容器本身设定的可存储资源的种类和初始数量、容量上限、数量能否为负等特征

    • 操作的异常

      捕捉操作失败的机制,取决于附着于资源操作的边界事件设定

模型案例1

资源容器Resource1中a资源初始值为10,每个Tick取出1,共10Tick,最终剩余a资源0

容器性质对操作的影响

  • 容器容量限制

    由于容器可以设置容量上限,模拟运行时如果放入资源数量后超出容量限制,将会立即触发运行报错,而不会等待腾出容量

  • 资源存量能否为负

    当资源容器设置为不可为负情况下,模拟运行时取出资源数量不足时将会立即触发报错,而不会等待资源存量增长到足够

边界事件

容器的操作不一定成功,诸如取出不足、触及容量上限、操作数量和资源种类错误等都会导致操作失败,一旦为容器操作设置了边界事件,相当于针对这些操作异常设置了应对机制

  • 错误边界事件

    相当于设置了失败应对机制,一旦操作失败,Trigger会立即流向边界事件后继对象

  • 时间边界事件

    • 相当于设置了等待机制,等待时长t取决于边界事件设定
    • 发生操作异常时(如放入超出上限、取出不足等)Trigger会暂时积压并最多等待t时长。等待期间t内,如果具备了操作条件(如容量被腾出足够/资源存量恢复足够),Trigger将正常流向该操作的后继对象;如果等待t时长后仍未具备操作条件,则Trigger将流向边界事件的后继对象
模型案例2
  • 案例1的基础(容器资源数量不可为负)上,将模型运行总次数延长到20Tick,则在第10Tick后Resource1的a资源将枯竭,继续取出会触发报错
  • 增加基于该操作的错误边界事件"not enough"后,第10Tick之后的所有取出操作都将因取出不足而触发错误边界,从而避免了运行报错中断,最终a资源仍然剩余0,GetNone变量记录的取出不足为10次
提示

直接修改容器存储的资源数量时,不会触发边界事件。

如一个带有时间边界事件的容器取出某种资源时数量不足,延时等待期间即便公式修改了该容器该资源的数量为足够,那也并不会导致该取出操作即刻执行,即只有在该容器被其它任意操作时才会激活本操作条件检查,从而判断能否操作。

关于交换

  • 多资源"守恒"式操作

    • 交换的本质是多方参与者支付若干种资源的同时,收入另外若干种资源
    • 如商品交易时购买者支付货币给出售者的同时,收到出售者一定数量的商品,交换各方收支的各种资源数量总体"守恒"
  • 当一个资源容器操作组件连接了2条及以上的不同方向操作链后,你可以选择"交换"模式,这将严格保证资源在被操作的过程中"守恒"

  • 系统提供了保证交换完全守恒的便捷机制,需要在组件上打开开关

  • 守恒交换时,对任意一种指定资源,如果共有n个操作,则在各操作链上定义好n-1个操作的数量后,最后1个操作数量可以为空默认"自动",系统将严格保持守恒的交换资源

    ContainerOperate_image3.png

  • 也可以自定义全部的n个操作,系统会在运行时核对各种资源设置的数量是否守恒,如果未守恒系统将会报错

提示

由于容器操作适合表达交换场景,所以在Web3领域仿真建模应用广泛。

模型案例3

用户A以钱包WalletA与交易池Pool以3000的价格交换USDC与ETH代币,WalletA初始本金10000 USDC,在购买3次、每次购买1 个ETH后,WalletA将拥有3 ETH、剩余本金1000 USDC,这是一个"守恒"的交换。

  • 当然,在多操作链且多向连接时也可以选择非交换模式,此时系统守恒机制不会介入,仅表达若干操作同时进行

操作的同时有效性

  • 当一个容器操作组件连接了多条容器操作链时,每条链对应的操作都成功Trigger才会继续向后流动
  • 如果没有边界事件,任意一个操作失败都会导致所有操作失败而报错终止运行
  • 如果有边界事件,边界事件被触发后,所有容器操作链上的操作都无效

使用和设置方法

资源操作只有交换模式一项设置,其余是通用的动作前后计算

ContainerOperate_image4.png

交换开关

  • 当不具备交换场景条件时,处于关闭状态且无法设置
  • 当具备交换场景条件时,交换模式开关将变为可设定,可以选择是否打开
提示

所谓"具备交换场景条件"是指,资源容器操作组件连接了2条及以上的不同方向操作链的时候。

这意味着,如果只有1条链,或者虽然是多条链、但是方向都相同时,都不可能为交换。

守恒的交换模式具体来说包括两种情况:

  • 资源转移,只有同一种资源的2个操作且方向不一致时,类似于系统动力学,如下模型案例4。
  • 交换,有2个即以上种类的资源,2个以上的操作且方向不一致,如上模型案例3。
模型案例4

操作"WETH"资源从一个容器Stock1转移至另一个Stock2