Starcoin 开发者文档
概览

Starcoin 是一个分层的,去中心化的区块链系统。

路线图

Starcoin 的路线图。

特性

Starcoin 的关键特性。

安装

这篇文章指导你如何安装 starcoin。

从源码构建

从源码构建 Starcoin。

运行/加入网络

starcoin 命令行工具可以用来启动本地网络或者加入测试网络或者主网。运行本地网络或者加入测试网络可以方便测试用户合约代码。可以使用 dev 命令编译, 发布,执行智能合约。

第一笔链上交易

这篇文章指导你如何在 starcoin 区块链上执行自己的第一笔交易。 在这之前,建议你先阅读 tech 相关的文章,对 starcoin 的基本概念有一定了解。

运行自定义的区块链网络

starcoin 支持运行一个用户自定义区块链网络,方便用户搭建私有链进行测试或者二次开发。

部署 Move 合约

这篇文章指导你如何编译和部署 Move 合约到 starcoin 区块链。

用户自定义 Coin|Token

这是一个关于 starcoin 区块链上如何定义用户自定义 Coin|Token 的例子。

形式化验证

介绍 Move 的形式化验证工具 Move Prover的基本用法。

挖矿

starcoin_miner 命令行工具用于远程连接到 starcoin 节点,并提供挖矿功能。

通过Dao升级Module
编译好要更新的Module; 解锁账号: starcoin% account unlock <account address> 提议更新Module: starcoin% dev module_proposal -s <account address> -m <module path> -v <version> 查询提议状态: starcoin% dev call --module-address <module address> --module-name Dao --func-name proposal_state -t 0x1::STC::STC -t 0x1::UpgradeModuleDaoProposal::UpgradeModule --arg <proposal address> --arg <proposal number> 任何人都可以给状态为 ACTIVE 的提议投赞成或者反对票: starcoin% dev execute -s <account address> -b --script cast_vote -t 0x1::STC::STC -t 0x1::UpgradeModuleDaoProposal::UpgradeModule --arg <proposal address> --arg <proposal number> --arg <agree> --arg <votes>u128 任何人都可以将状态为 AGREED 的提议放入更新队列: starcoin% dev module_queue -s <account address> -a <proposal address> -m <proposal number> 任何人都可以为状态为 QUEUED 的提议提交更新计划: starcoin% dev module_plan -s <account address> -a <proposal address> -m <proposal number> 如果提议的状态为 EXECUTABLE,任何人都可以更新对应的Module: starcoin% dev module_exe -s <account address> -m <module path>
技术

一些关于 starcoin 的技术文档。

OnChainConfig
OnChainConfig主要实现不用重启链的情况下,可以更新链上的一些配置。在 Starcoin 中,可以通过标准库中的DAO实现来修改链上的参数。 下面主要介绍OnChainConfig的功能以及使用方式。 OnChainConfig可修改的配置: # TransactionPublishOption VMConfig ConsensusConfig RewardConfig TransactionTimeoutConfig DaoConfig Version 具体每个配置的详细字段信息,请参考附录表格。 OnChainConfig修改流程 # OnChainConfig的修改流程主要包括以下步骤: 确定待修改配置的参数值,发起OnChainConfigDao提案。 用户发起投票。 提案通过执行修改交易。 验证参数是否生效。 Dao具体流程参考 Dao。 下面用修改Version的信息来举例说明: 修改Version的配置: # 把Version的major修改为8,发起投票。 注意:每个配置修改,对应的提案脚本不一样,参考附录的表格。 #先解锁默认账户,可以通过 account show命令查询。注意:以下用到的账户(0x43019bd9fd7b25c5275867a0f0b17010)都需要替换成自己的。 account unlock 0x43019bd9fd7b25c5275867a0f0b17010 -d 1800 dev execute -s 0x43019bd9fd7b25c5275867a0f0b17010 -b --script propose_update_version --arg 8 0 提案发起后,用户需要等待公示期过后才能开始投票。 可以使用如下命令查看提案信息。 dev call --module-address 0x1 --module-name Dao --func-name proposal_info -t 0x1::STC::STC -t 0x1::ModifyDaoConfigProposal::DaoConfigUpdate --arg 0x43019bd9fd7b25c5275867a0f0b17010 --arg 0 用户投票 投票的用户需要blance不能为0,可以通过挖矿或者其他账户转账的方式获得。
DAPP 开发例子演示
本文以一个 defi 挖矿的例子介绍如何在 starcoin 上开发 DApp。 准备工作 # 本地启动一个 dev 节点。可参考 运行网络 章节。 到 starcoin wallet 页面下载 Starcoin 钱包。 clone https://github.com/starcoinorg/rewarding-dapp 到本地。 钱包层 # dapp 通过钱包和链进行交互,通过钱包进行交易的签名和广播。 以下介绍如何初始化钱包。 钱包初始化 # 将 dev 节点的私钥导入到钱包中。 查看私钥的命令如下: starcoin% account export 0x2291c747b396303a6475db8468a910d0 account 0x2291c747b396303a6475db8468a910d0, private key: 0xf6832e44f94c95606d2ab895b719e6d2811047115a84d87646abb4ee7393bf29 导入后,可以查看自己的 STC 余额以及交易信息。 合约层 # move 合约的开发有一定的门槛,需要开发者对 move 有一定了解。 这里就不介绍怎么开发合约了,只把编译,部署合约的命令提供给大家。 合约编译 # 针对 demo 中的合约,依次执行以下命令进行合约编译。(需要将文件路径替换成你自己的文件路径) # 编译 module starcoin% dev compile /Volumes/SATA2000DM008-2FR102/projects/starcoinorg/rewarding-pool-dapp/contracts/modules/RewardPool.
关键概念

本文介绍 Starcoin 中的关键概念。

去中心化治理
Token 的去中心化治理已经成为区块链必不可少的一部分。 在 Starcoin 中,可以用 Move 语言方便的实现 DAO 功能。 标准库中内置了一个 DAO 实现,Starcoin 本身也可以通过该模块对各种链上参数进行投票治理。 本节主要介绍该模块的功能以及使用方式。 DAO 功能 # 一个基本的 DAO 治理流程大概包括: 发起人发起提案。 用户投票。 提案通过以及执行。 目前以太坊上已经有一套功能完备的实现, 但 Starcoin 的 Token 模型以及 Move 的编程模型和 ERC20/Solidity 有很大区别,无法直接复用现有的代码体系。 因此,我们设计和实现了适合 Starcoin 的 DAO 治理。 Starcoin 的 DAO 实现与以太坊的 DAO 实现一个最大的区别是:Starcoin 中,每种类型的提案都有一个单独的合约模块去控制,由该模块去实现提案的发起和提案的执行。 这是因为,以太坊中,智能合约可以通过动态分发去调用其他合约接口,因此可以做到一个合约去发起所有类别的提案,只需要在合约内部动态调用即可。但 Move 是一个函数静态分发调用的模型(这里不多叙述,感兴趣的读者可以阅读 Move 相关的文档),所有的代码调用都必须在编译时确定,做不到动态分发。因此产生了前述的区别。 提案的投票则由 DAO 模块统一负责,DAO 模块对提案做了抽象(实现上,提案是 DAO 模块的一个范型参数),用 proposal_id 去标识某个提案,至于提案是什么内容,它不关心,交给用户自己去判断。 投票时,用户通过 DAPP 去获取某个提案的具体内容,然后直接调用 DAO 模块的接口投票,赞成或者反对。 这样可以做到,不同提案可以实现自己的提案逻辑,但又可以共享 DAO 模块的投票功能。
多签账户以及多签交易
多签账户和多签交易 # 本节介绍多签账户的使用,包括如何创建通过 cli 在链上创建多签账户,以及如何发起多签交易。 前置准备 # 请保证 starcoin 节点已经启动。 已经启动 cli 连接到节点。 wallet 存在至少三个地址。 已经通过 dev get_coin 给默认的钱包地址充钱。 下图是我的初始状态。 starcoin% account list +----------------------------------+------------+------------------------------------------------------------------+ | address | is_default | public_key | +----------------------------------+------------+------------------------------------------------------------------+ | 2a3a2feefb08a61450e8c84b5ca86cfb | false | 908648b8fdff8b9e337b2e546c0ce5ca6f24dee715de0782e2f7943c677b6284 | +----------------------------------+------------+------------------------------------------------------------------+ | 9503b1e9052e6c5cc0b4f9e8d303fa83 | false | ca9eb069f655145d1bf61829e59ef5c70ac10c8acf0d1a6ffadd1a40505d3283 | +----------------------------------+------------+------------------------------------------------------------------+ | 6142815e14be403fef8048b945cd4685 | true | 37283fa8e0b2aa1df9567104d72053c3ee6947bf96559a9a8452870f9d2b5dcf | +----------------------------------+------------+------------------------------------------------------------------+ 给默认钱包地址充钱。 starcoin% dev get_coin txn mined in block hight: 1, hash: b75bbe0ac17639d746a823a67b278e892cd635aa83ca66694e374d059527e6cf +-----------------+------------------------------------------------------------------+ | gas_unit_price | 1 | +-----------------+------------------------------------------------------------------+ | id | 865e314c93bc51eeb19599e8c87a10734d539494c90f2f9b0bb765e64f67c3e3 | +-----------------+------------------------------------------------------------------+ | max_gas_amount | 2000000 | +-----------------+------------------------------------------------------------------+ | sender | 0000000000000000000000000a550c18 | +-----------------+------------------------------------------------------------------+ | sequence_number | 1 | +-----------------+------------------------------------------------------------------+ starcoin% account show 6142815e14be403fef8048b945cd4685 +--------------------+------------------------------------------------------------------+ | account.