容器操作
图标

功能
取放容器中的内容(资源或实体)
要点
理解和应用
-
可以表达对可生产消耗资源的出库/消费/支付和入库/生产/收入
例子- 游戏中的农民将收获的粮食放入仓库,粮食就是资源,库存即为资源容器,粮食入库即为添加资源进入资源容器的操作
- DeFi领域中EOA用户连接钱包后以3000$USDC与DEX交换得到1$ETH,对于钱包容器而言,同时支出$USDC和收入$ETH,对DEX流动性池容器而言,同时支出$ETH和收入$USDC,这个交换过程也是容器操作
-
也可以表达对可重复使用资源占用申请与释放
例子车辆进入停车场,本质上可以看做先"申请"车位资源,获得后才能进入,离开时"释放"车位,对于停车场资源容器来说,车位即为其中资源、申请和释放即为对容器的资源操作
我们通常将各种ERC20代币视作资源,将用户钱包和DEX流动性池视作资源容器,这样就能轻松管理EOA账户地址和智能合约地址的各种代币余额,而不是完全照搬ERC20全局账本的模式,从而实现方便的模拟交易和对系统本质原理更加直观的呈现和理解。
图形建模语法
因为当流程Trigger抵达资源操作时才会触发其运行,所以建议阅读流程时,先沿后继链阅读整个流程主干逻辑,再关注资源操作的相关信息,即先读主干、再读分支,从而避免在此处因为同时存在多种流程链和组件对象而造成困惑。
- 每条操作链只能连接一个容器,但多条链可以连在一个容器操作上
组件无输出数据
资源操作运行机制
基本
- 系统按资源种类(容器的键)分门别类的操作、互不相关
- 资源操作运行的关键信息
-
取放方向
来自容器操作链的方向,当操作链从容器操作指向容器时代表放入容器资源,反之代表从容器中取出资源
-
取放资源的种类和数量
来自容器操作链的属性面板设定
-
是否为交换模式
根据容器操作对象的交换模式设定
-
容器性质和状态
容器本身设定的可存储资源的种类和初始数量、容量上限、数量能否为负等特征
-
操作的异常
捕捉操作失败的机制,取决于附着于资源操作的边界事件设定
-
资源容器Resource1中a资源初始值为10,每个Tick取出1,共10Tick,最终剩余a资源0
容器性质对操作的影响
-
容器容量限制
由于容器可以设置容量上限,模拟运行时如果放入资源数量后超出容量限制,将会立即触发运行报错,而不会等待腾出容量
-
资源存量能否为负
当资源容器设置为不可为负情况下,模拟运行时取出资源数量不足时将会立即触发报错,而不会等待资源存量增长到足够
边界事件
容器的操作不一定成功,诸如取出不足、触及容量上限、操作数量和资源种类错误等都会导致操作失败,一旦为容器操作设置了边界事件,相当于针对这些操作异常设置了应对机制
-
错误边界事件
相当于设置了失败应对机制,一旦操作失败,Trigger会立即流向边界事件后继对象
-
时间边界事件
- 相当于设置了等待机制,等待时长t取决于边界事件设定
- 发生操作异常时(如放入超出上限、取出不足等)Trigger会暂时积压并最多等待t时长。等待期间t内,如果具备了操作条件(如容量被腾出足够/资源存量恢复足够),Trigger将正常流向该操作的后继对象;如果等待t时长后仍未具备操作条件,则Trigger将流向边界事件的后继对象
- 案例1的基础(容器资源数量不可为负)上,将模型运行总次数延长到20Tick,则在第10Tick后
Resource1的a资源将枯竭,继续取出会触发报错 - 增加基于该操作的错误边界事件"not enough"后,第10Tick之后的所有取出操作都将因取出不足而触发错误边界,从而避免了运行报错中断,最终a资源仍然剩余0,
GetNone变量记录的取出不足为10次
直接修改容器存储的资源数量时,不会触发边界事件。
如一个带有时间边界事件的容器取出某种资源时数量不足,延时等待期间即便公式修改了该容器该资源的数量为足够,那也并不会导致该取出操作即刻执行,即只有在该容器被其它任意操作时才会激活本操作条件检查,从而判断能否操作。
关于交换
-
多资源"守恒"式操作
- 交换的本质是多方参与者支付若干种资源的同时,收入另外若干种资源
- 如商品交易时购买者支付货币给出售者的同时,收到出售者一定数量的商品,交换各方收支的各种资源数量总体"守恒"
-
当一个资源容器操作组件连接了2条及以上的不同方向操作链后,你可以选择"交换"模式,这将严格保证资源在被操作的过程中"守恒"
-
系统提供了保证交换完全守恒的便捷机制,需要 在组件上打开开关
-
守恒交换时,对任意一种指定资源,如果共有n个操作,则在各操作链上定义好n-1个操作的数量后,最后1个操作数量可以为空默认"自动",系统将严格保持守恒的交换资源

-
也可以自定义全部的n个操作,系统会在运行时核对各种资源设置的数量是否守恒,如果未守恒系统将会报错
由于容器操作适合表达交换场景,所以在Web3领域仿真建模应用广泛。
用户A以钱包WalletA与交易池Pool以3000的价格交换USDC与ETH代币,WalletA初始本金10000 USDC,在购买3次、每次购买1 个ETH后,WalletA将拥有3 ETH、剩余本金1000 USDC,这是一个"守恒"的交换。
- 当然,在多操作链且多向连接时也可以选择非交换模式,此时系统守恒机制不会介入,仅表达若干操作同时进行
操作的同时有效性
- 当一个容器操作组件连接了多条容器操作链时,每条链对应的操作都成功Trigger才会继续向后流动
- 如果没有边界事件,任意一个操作失败都会导致所有操作失败而报错终止运行
- 如果有边界事件,边界事件被触发后,所有容器操作链上的操作都无效
使用和设置方法
资源操作只有交换模式一项设置,其余是通用的动作前后计算

交换开关
- 当不具备交换场景条件时,处于关闭状态且无法设置
- 当具备交换场景条件时,交换模式开关将变为可设定,可以选择是否打开
所谓"具备交换场景条件"是指,资源容器操作组件连接了2条及以上的不同方向操作链的时候。
这意味着,如果只有1条链,或者虽然是多条链、但是方向都相同时,都不可能为交换。
守恒的交换模式具体来说包括两种情况:
- 资源转移,只有同一种资源的2个操作且方向不一致时,类似于系统动力学,如下模型案例4。
- 交换,有2个即以上种类的资源,2个以上的操作且方向不一致,如上模型案例3。
操作"WETH"资源从一个容器Stock1转移至另一个Stock2
