...
代码块 |
---|
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 |
类型参数:
类型参数 | 约束 | 描述 | ||
---|---|---|---|---|
| store | 状态类型ActionT | copy, store | 提案的Action |
参数:
参数名称 | 类型 | 描述 | |||
---|---|---|---|---|---|
sender | signer | 发起方 | |||
state_channel_id |
| 状态通道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 |
| 状态通道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 |
类型参数:
类型参数 | 约束 | 描述 |
---|---|---|
| store | 状态类型 |
ProposalAction | store | 提案Action |
参数:
参数名称 | 类型 | 描述 |
---|---|---|
sender | signer | 发起方 |
state_channel_id |
| 状态通道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接口
...