版本比较

密钥

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

代码块
aptos move run \
  --function-id rooch::state_channel::keep_alive_entry \
  --type-argargs=rooch_demo::editor::Document \
  --argargs=11001

聊天合约

代码块
aptos move run \
  --function-id rooch::state_channel::keep_alive_entry \
  --type-argargs=rooch_demo::chat::ChatGroup \
  --argargs=11001

MoveCraft合约

代码块
aptos move run \
  --function-id rooch::state_channel::keep_alive_entry \
  --type-argargs=rooch_demo::movecraft::Land \
  --argargs=11001

1.3.2

...

创建结算提案

代码块
rooch::state_channel::create_settlement_proposal_entry

类型参数:

类型参数

约束

描述

StateT

store

状态类型ActionT

copy, store

提案的Action

参数:

参数名称

类型

描述

sender

signer

发起方

state_channel_id

u256u64

状态通道ID

action

ActionT

提案的动作

from_height

u128

起始高度

to_height

u128

结束的高度

change_sets

vector<u8>

变更集

返回值:

业务逻辑:

发起一个提案。

支持的提案:

提案Action

提案描述

SettlementAction

结算

PunishAction

惩罚

...

代码块
aptos move run \
  --function-id rooch::state_channel::create_settlement_proposal_entry \
  --type-argargs=rooch_demo::editor::Document \
  --type-arg=rooch_demo::editor::SettlementDocument \
  --argargs=1001 1  --arg=1100 b"23A145AB448872B1"

聊天合约

代码块
aptos move run \
  --function-id rooch::state_channel::keepcreate_settlement_aliveproposal_entry \
  --type-argargs=rooch_demo::chat::ChatGroup \
  --argargs=1

...

1001 1 100 b"23A145AB448872B1"

MoveCraft合约

代码块
aptos move run \
  --function-id rooch::state_channel::keepcreate_settlement_aliveproposal_entry \
  --type-argargs=rooch_demo::movecraft::Land \
  --argargs=1001 1 100 b"23A145AB448872B1"

1.3.3 对提案进行投票

代码块
rooch::state_channel:vote_proposal_entry

...

参数名称

类型

描述

sender

signer

发起方

state_channel_id

u256u64

状态通道ID

proposal_id

u256u64

提案ID

vote_option

u8

投票选项:

0:反对

1: 赞成

2:弃权

返回值:

业务逻辑:

对提案投票。

...

调用示例:

协同编辑器

代码块
aptos move run \
  --function-id rooch::state_channel:execute:vote_proposal_entry

类型参数:

...

类型参数

...

约束

...

描述

...

StateT

...

store

...

状态类型

参数:

...

参数名称

...

类型

...

描述

...

sender

...

signer

...

发起方

...

state_channel_id

...

u256

...

状态通道ID

...

proposal_id

...

u256

...

提案ID

返回值:

业务逻辑:

...

 \
  --type-args=rooch_demo::editor::Document \
  --args=1001 1 1

聊天合约

代码块
aptos move run \
  --function-id rooch::state_channel::vote_proposal_entry \
  --type-args=rooch_demo::chat::ChatGroup \
  --args=1001 1 1

MoveCraft合约

代码块
aptos move run \
  --function-id rooch::state_channel::vote_proposal_entry \
  --type-args=rooch_demo::movecraft::Land \
  --args=1001 1 1

1.3.4 执行提案

代码块
rooch::state_channel:execute_proposal

类型参数:

类型参数

约束

描述

StateT

store

状态类型

ProposalAction

store

提案Action

参数:

参数名称

类型

描述

sender

signer

发起方

state_channel_id

u256

状态通道ID

proposal_id

u256

提案ID

返回值:

ProposalAction

业务逻辑:

执行提案。

调用示例:

协同编辑器

代码块
module rooch_demo::editor {
     use rooch::state_channel::{Self, StateChannel};
     
     const ERR_FILE_NOT_EXISTS: u64 = 5;
     
     public entry fun document_settlement<Document>(account: &signer, state_channel_id: u64, proposal_id: u64) {
          let editor = borrow_global_mut<DocumentEditor>(EDITOR_ADDRESS); 
          let editing_doc = table::borrow<u64, EditingDocument>(&editor.editingDocuments, state_channel_id);
          let settlement_cap = editing_doc.settlement_cap;
          
          let doc = state_channel::borrow_mut<Document>(account, settlement_cap, state_channel_id);
          let settlement_action = state_channel::execute_proposal(editing_doc.channel_id, proposal_id)
          let change_sets = state_channel::get_change_sets(settlement_action)
          
          let n = len(change_sets.state);
          while(i < n) {
            let change_set = change_sets.state[i]
            document_apply_change_set(doc, change_set);
            i = i + 1
          }
     }
     
     fun document_apply_change_set(doc: &mut Docuemnt, cs: state_channel::StateChangeSet) {
         if op::is_new(cs) {
             let new = op::new(cs)
             if new.path == "elements" {
                 document_create_element(doc, new.data)
             }
         } else if (op::is_modify(cs)) {
             let modify = op::modify(cs)
             if new.path == "elements" {
                 document_update_element(doc, modify.id, modify.val)
             }
         } else {
             let del = op::delete(cs)
             if del.type == "rooch_demo::editor::Element" {
                document_delete_element(doc, del.id)
             }
         }
     }
}

聊天合约

代码块
aptos move run \
  --function-id rooch::state_channel::vote_proposal_entry \
  --type-args=rooch_demo::chat::ChatGroup \
  --args=1001 1 1

MoveCraft合约

代码块
aptos move run \
  --function-id rooch::state_channel::vote_proposal_entry \
  --type-args=rooch_demo::movecraft::Land \
  --args=1001 1 1

2、P2P Node

2.1 模块图

...

源文件

2.2 Stream接口

...