区块链中文技术社区 - OtherChain-新手教程
type: channel
link: https://bcskill.com/index.php/category/OtherChain-新手教程/
items: Delivery层初始化配置
items: plasma与侧链区别
items: kaleido chain 测试链部署
items: ZKP（Zero-Knowledge Proofs）技术调研
items: Swarm激励模型合约
items: ETH 2.0技术调研
items: Chia 分布式部署详细文档
items: Chia 源代码编译安装
items: 使用Chia Gui程序P数据的简单使用
items: 为Chia P盘机器提供存储服务

Delivery层初始化配置
type: item
date: 2022-11-23T09:43:08+08:00
description: Delivery层初始化配置 首先需要和bttc层一样准备一个genesis配置，如果是同步现有测试网或者主网，可以官方仓库拿到 主网：https://github.com/bttcprotocol/launch/blob/master/mainnet-v1/without-sentry/delivery/config/genesis.json 测试网：https://github.com/bttcprotocol/launch/blob/master/testnet-1029/without-sentry/delivery/config/genesis.json 如果是启动私链也可以自己创建，deliveryd程序也提供了初始化测试链的功能，比如需要创建一个私链，3个验证者2个同步节点 ./deliveryd create-testnet --v 3 --n 2 --output-dir ./output --chain-id delivery-9528 执行完成后，会自动创建5个节点对应的配置文件，每份主要的配置如下 genesis.json 初始化链配置，主要关心以下字段 chain_id 链id app_state->accounts 初始化账户资金等信息 bor->spans->validator_set->validators 初始化验证者信息 bor->spans->validator_set->proposer 初始化提案者信息 bor->spans->selected_producers 初始化当前生产者信息 bor->spans->bor_chain_id bttc层链id chainmanager->chain_params 链合约相关地址 checkpoint 配置相关参数 gov 治理相关参数 slashing 惩罚相关参数 staking 初始化相关地址抵押量 对于私链，在初始化数据基础上，主要关注chain_id和chain_params，其余地址相应数据使用默认即可 config.toml 链基础配置，主要关心参数如下 fast_sync：是否开始快速同步 db_dir: 数据的存放位置 genesis_file：genesis.json存放位置 priv_validator_key_file：验证者私钥文件位置 priv_validator_state_file：验证者状态文件位置 node_key_file：节点密钥存放位置 persistent_peers：持久链接的peer地址，类同于eth的staticnode private_peer_ids: 私有的节点id, 用于隐私接入，比如哨兵节点 登录验证人节点. 运行 deliveryd tendermint show-node-id. 示例: private_peer_ids = "e2c6a611e449b61f2266f0054a315fad6ce607ba" delivery-config.toml RPC和 REST配置，主要关心参数如下 eth_rpc_url：eth链RPC地址 bsc_rpc_url：bsc链RPC地址 bttc_rpc_url：bttc层RPC地址 tron_rpc_url：tron链RPC地址 测试网：47.252.19.181:50051 tron_grid_url：tron链grid地址 测试网：https://test-tronevent.bt.io amqp_url：AMQP地址，在bridge过程中会用于任务的消息队列 node_key.json 节点的密钥信息，可以使用工具自动生成 priv_validator_key.json 节点验证者的密钥信息，可以使用工具自动生成 对于单节点测试，也可以直接执行初始化 ./deliveryd init --chain-id delivery-9528 --home ./

plasma与侧链区别
type: item
date: 2022-11-15T10:27:48+08:00
description: 侧链 优点 实现上相对简单易用 缺点 但需要在信任侧链的基础之上，如果侧链失败（意味着共识机制受到损害），您可能会损失所有资金。 相对解决 通常是只跨小额临时使用的代币，将风险人为控制降低。 plasma 优点 plasma在设计上比侧链更安全。（用户可以使用区块根来表明他们在 Plasma 链上收到了资金，如果 Plasma 链共识机制停止创建区块，用户可以使用区块根向以太坊提出索赔） 缺点 不能真正进行与侧链相同的复杂操作。不做信任假设来保证资金安全，所以我们总是不得不假设 Plasma 链共识机制随时可能失败，需要围绕它进行设计。这对 Plasma 链上可能发生的事情增加了额外的限制。主要缺点是你不能真正进行与侧链相同的复杂操作 参考 https://docs.plasma.group/en/latest/src/plasma/sidechains.html

kaleido chain 测试链部署
type: item
date: 2021-10-12T18:03:00+08:00
description: 由于在调研Algorand共识，所以最近阅读和测试相关的链实现，此篇将主要讲解kaleido的私链部署测试。 由于相关项目基本已经很久不更新，文档社区匮乏，只能阅读代码，反向推出运行参数和步骤。 编译源代码 参考《kaleido 编译与测试》，执行编译相关子程序 make all 最终kaleido\build\bin会生成genesis程序，下面会用到 genesis.json创建 启动私链，首先需要准备bios节点配置 阅读相关代码（github） 可以使用genesis程序进行生成，首次直接运行genesis后 Hint: You must make a minerkey before making genesis. 提示需要先生成minerkey，继续跟进 阅读相关代码（github） makeMinerKeyCommand = cli.Command{ Action: utils.MigrateFlags(makeMinerKey), Name: "makeminerkey", Usage: "Generates a miner key for mining", ArgsUsage: " ", Flags: []cli.Flag{ utils.DataDirFlag, utils.MinerStakeOwnerFlag, utils.MinerKeyCoinbaseFlag, utils.MinerKeyStartFlag, utils.MinerKeyLifespanFlag, }, Category: "MINER COMMANDS", Description: ` The makeMinerKey command generates a miner key for mining. If the key already exists, just return it. 可以使用kalgo加上参数makeminerkey进行生成，参考有限文档例子如下 mkdir $PWD/data export KALEIDO_HOME=$PWD/data echo $KALEIDO_HOME ./kalgo makeminerkey \ --miner.stakeowner 0x48F155527f25EB1d4cb2aa32b7e84692AA0025C0 \ --minerkey.coinbase 0x48F155527f25EB1d4cb2aa32b7e84692AA0025C0 \ --minerkey.start 1 0x48F155527f25EB1d4cb2aa32b7e84692AA0025C0修改为自己的地址 执行生成后，返回 MinerKey: 0x39fb25e90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006400000000000000000000000048f155527f25eb1d4cb2aa32b7e84692aa0025c003ada2cdce38f8fd0aafbaf5542a03a78b90b93ce594e0568760ba952e2b1f534566f9bde28e7b7d6ba8a369e0a4a6b419b12b86cb577c374cd257ef0a5a5645 Details: miner = 0x48F155527f25EB1d4cb2aa32b7e84692AA0025C0 coinbase = 0x48F155527f25EB1d4cb2aa32b7e84692AA0025C0 start = 1 end = 1000000 lifespan = 100 vrfVerifier = 0x03ada2cdce38f8fd0aafbaf5542a03a78b90b93ce594e0568760ba952e2b1f53 voteVerfier = 0x4566f9bde28e7b7d6ba8a369e0a4a6b419b12b86cb577c374cd257ef0a5a5645 GenesisStorage: 0xf542409778bcdead44d9b45f4b07b70b047acb90dcda73c55b6b72088ca2fefd = 0x48f155527f25eb1d4cb2aa32b7e84692aa0025c0000000640000000000000001 0xf542409778bcdead44d9b45f4b07b70b047acb90dcda73c55…

ZKP（Zero-Knowledge Proofs）技术调研
type: item
date: 2021-08-25T12:26:00+08:00
description: 在之前《隐私/匿名币》中说过Zcash 首次运用 zk-SNARKs 零知识证明技术验证交易有效性，原来的计划是先把基于以太坊的侧链开发完成，再做ZKP（Zero-Knowledge Proofs）的技术跟进，以解决匿名交易以及增强TPS扩容方案（交易指纹上链，交易数据链下存储）。 今天先做一些技术调研和储备，方便后续技术评估时的一些技术方向的把控 技术相关 《什么是 zk-SNARK？》 《零知识证明：STARKs 与 SNARKs》 《zk-SNARKs 介绍（零知识证明概述以及如何将 zk-SNARK 集成到以太坊中）》 https://zokrates.github.io/ https://docs.ethhub.io/ethereum-roadmap/privacy/ https://starkware.co/ https://docs.ethhub.io/built-on-ethereum/infrastructure/aztec-protocol/ https://scrt.network/blog/introducing-secret-network https://ethresear.ch/t/zether-the-first-privacy-mechanism-designed-for-ethereum/5029 https://ethereum.stackexchange.com/questions/49781/can-zksnarks-be-implemented-on-the-ethereum-ecosystem https://github.com/starkware-libs/ https://hackmd.io/@zkteam/gnark https://docs.gnark.consensys.net/en/latest/ 开源代码 https://github.com/zkcrypto/bellman/ https://github.com/matter-labs/bellman https://github.com/zcash/librustzcash (Groth16) https://github.com/zcash/mpc https://github.com/scipr-lab/libsnark https://github.com/Zokrates/ZoKrates https://github.com/AztecProtocol https://github.com/arnaucube/go-snark-study https://github.com/vocdoni/go-snark https://github.com/ConsenSys/gnark (Groth16, PlonK) https://github.com/ConsenSys/gnark-crypto https://github.com/nikkolasg/playsnark （Groth16, PHGR13） https://github.com/ConsenSys/quorum

Swarm激励模型合约
type: item
date: 2021-05-12T19:00:00+08:00
description: 源代码：https://github.com/ethersphere/swap-swear-and-swindle Swarm目前只跑在Goerli测试网，核心的合约为ERC20SimpleSwap，源代码在master分支，对于后续功能合约 full Swap, Swear and Swindle相关代码在experimental分支 逻辑简述 目前Swarm的Goerli测试网部署的合约逻辑为 用户通过执行SimpleSwapFactory合约，部署ERC20SimpleSwap合约，并与发行的gBZZ代币交互 用户与Swarm交互 测试用户 0x10210572d6b4924Af7Ef946136295e9b209E1FA0 部署ERC20SimpleSwap合约 用户地址通过执行SimpleSwapFactory合约的deploySimpleSwap方法，完成部署ERC20SimpleSwap合约，通过查看交易的eventlog,部署的Chequebook合约地址为0x68f7ea9f3fae55e3e55fee0f0761b7df570fd212 deploySimpleSwap合约代码 function deploySimpleSwap(address issuer, uint defaultHardDepositTimeoutDuration) public returns (address) { address contractAddress = address(new ERC20SimpleSwap(issuer, ERC20Address, defaultHardDepositTimeoutDuration)); deployedContracts[contractAddress] = true; emit SimpleSwapDeployed(contractAddress); return contractAddress; } deploySimpleSwap执行同时完成了ERC20SimpleSwap的构造初始化 constructor(address _issuer, address _token, uint _defaultHardDepositTimeout) public { issuer = _issuer; token = ERC20(_token); defaultHardDepositTimeout = _defaultHardDepositTimeout; } 同时初始化了交互Token gBZZ代币 订金（为支票薄提供资金） 通过执行API进行为支票薄提供资金 http://localhost:1635/chequebook/deposit?amount=1000000000 执行的逻辑为用户地址0x10210572d6b4924af7ef946136295e9b209e1fa0向自己的Chequebook合约地址0x68f7ea9f3fae55e3e55fee0f0761b7df570fd212转对应数量的gBZZ，也可以理解成充值抵押 测试交易 https://goerli.etherscan.io/tx/0x81080bdc2ee4ede8898f003c4b74c9dcabdd6467e443f9ab8669f0c62434aaee 提现 将自己Chequebook合约中的gBZZ体现到用户地址 执行逻辑为执行自己的Chequebook合约地址0x68f7ea9f3fae55e3e55fee0f0761b7df570fd212中的withdraw方法。 合约代码 function withdraw(uint amount) public { /* 只有发行人可以做到这一点 */ require(msg.sender == issuer, "not issuer"); /* 确保我们不从保证金中提取任何东西 */ require(amount <= liquidBalance(), "liquidBalance not sufficient"); require(token.transfer(issuer, amount), "transfer failed"); } 测试交易 https://goerli.etherscan.io/tx/0x967fabac2da76d868a9f80d8a64baacbe2cb585519388a4494593705ef050421 分析ERC20SimpleSwap合约 // SPDX-License-Identifier: BSD-3-Clause pragma solidity =0.7.6; pragma abicoder v2;…

ETH 2.0技术调研
type: item
date: 2021-05-10T19:02:51+08:00
description: https://ethos.dev/beacon-chain/ 稍后补充

Chia 分布式部署详细文档
type: item
date: 2021-04-27T11:55:00+08:00
description: 最近社区很多小伙伴来询问Chia分布式部署的方法，那我们今天就写一下Chia分布式的步骤以及测试环境验证 分布式的逻辑 其实前面已经写过部署的草稿了《Chia 分布式部署文档》，但是由于当时时间紧，对于没有开发基础的小伙伴理解上还是有些难度。 下面我们详细说下分布式拆分原理以及注意事项 下面是Chia架构模块结构 简单说每个模块都是单独的程序，都是通过TCP连接的，对于Chia Gui程序，默认运行是把各个模块都运行在本地，localhost连接的。对于分布式来说，就是把各个模块根据功能和负载等因素分不到不同机器。 模拟生产环境 由于plots存储量体量无上限，并且数据可重新生成，对于存储量和数据安全来说，优先选择存储量，所以单盘存储，不做raid。 对于专门做Chia挖矿的,一般的硬件配置是搞一部分配置稍微好的机器做P盘机（绘图机/work机..）{稍后会专门写一篇推荐生产P盘配置的文章},一些二手的存储机做存储（服务器前部分是磁盘阵列），P盘机硬件配置存储部分只有SSD临时绘图用，最终的plots存储到存储机《为Chia P盘机器提供存储服务》 此篇文章我们主要讲挖矿的分布式，对于P盘自动化，后面会有专门的程序和文章做讲解。 生产环境中，一般是把所有的机器放到一个IDC机房，或者自己来管理，所以模块内服务器都是内网连接，网络环境相对简单。 中控高度可控 对于系统化架构的设计大致如下，各模块彼此低耦合，对于一台机器只要装上中控子服务，配置好Chia中控调度地址，Chia中控调度服务会自动配置该机器的环境，并自动下发相应的任务，减少用户的学习成本。 也可以用于推广绘图算力和绘图存储， 用户只需要安装对应中控子服务（绘图/存储），Chia中控调度中心即可自动下发对应的任务，对于绘图任务类似POW，根据用户绘图量用户得到相应的奖励。 用户也可以选择存储任务，此时中控子服务会下发已经会好的图，用户无感知，只需要准备好足够容量的存储空间即可，子服务会自动安装好Harvester相关服务配置，中控调度只需要定时检查用户存储状态和网络环境，就可以根据工作量进行奖励发放。当然发放的可以别的链的对应代币，可以用于对冲推广代币等。 只是对调度服务的另一个使用场景吧， 后面社区也许会推出整体服务，暂时不确定 对于没有开发能力的，架构中的中控服务可以先用人工来代替 简化后架构如下 对于各模块的增改也先人工处理 实际测试 我们来演示最基础的分布式挖矿配置，一台挖矿服务器和两台存储服务器之前的配置，以及验证配置是否正确。 稍后继续补充

Chia 源代码编译安装
type: item
date: 2021-04-21T15:16:26+08:00
description: 操作系统 Ubuntu 20.04 编译 sudo apt-get update sudo apt-get upgrade -y # Checkout the source and install git clone https://github.com/Chia-Network/chia-blockchain.git -b latest cd chia-blockchain sh install.sh . ./activate # The GUI requires you have Ubuntu Desktop or a similar windowing system installed. # You can not install and run the GUI as root sh install-gui.sh cd chia-blockchain-gui npm run electron & 升级 cd chia-blockchain chia stop -d all deactivate git fetch git checkout latest git pull # If you get RELEASE.dev0 then delete the package-lock.json in chia-blockchain-gui and install.sh again sh install.sh . ./activate chia init # The GUI requires you have Ubuntu Desktop or a similar windowing system installed. # You can not install and run the GUI as root sh install-gui.sh cd chia-blockchain-gui npm run electron & 参考 https://github.com/Chia-Network/chia-blockchain/wiki/INSTALL#ubuntudebian

使用Chia Gui程序P数据的简单使用
type: item
date: 2021-04-19T17:04:02+08:00
description: 下载 Chia GUI 程序 Windows下载地址: https://github.com/Chia-Network/chia-blockchain/releases/download/1.0.5/ChiaSetup-1.0.5.exe 然后安装完启动 启动程序 如果之前有创建过账户,则点击“自助记词中导入(24个词)”,如果没有的话,直接点击“创建一个新的私钥” 创建一个新的私钥 把助记词保存好,最好手抄到文件,存放到安全的地方 点击下一步,进入主程序 确认“连接状态”为“已连接”,对于“状态”刚开始运行时会显示“未同步”,稍微等等就好了. 开始P数据 点击“绘图” 点击“添加PLOT文件” 分别对各个选项做设置 1. 选择Plot文件大小 确认“选择Plot文件大小”选择的是“101.04GiB(k=32 ...)” 目前这个是主网最优的选项, 对于测试网可以选择“600MiB(k=25 ...)” 2. 选择要拓荒的数量 绘图数设置为 当前机器CPU 总核心数相等的数(即为2线程一个任务) 并选择“并发拓荒” 备注 如果想设置单线程跑一个任务,则点击“显示高级选项”,修改线程数量为1, 同时上一步中的绘图数设置为CPU核心数的2倍. 3. 选择临时目录 选择存放临时数据的存储目录 这个是P数据时计算需要的临时空间,这个存储需要较高的读写速度,不然严重影响P盘速度 单个任务大概需要304G空间. 4. 选择最终目录 选择最终P数据的生成位置,也就是单独的存储服务器的存储目录. 存储服务部署,可以查看《为Chia P盘机器提供存储服务》

为Chia P盘机器提供存储服务
type: item
date: 2021-04-19T15:48:00+08:00
description: 逻辑简述 简单来说就是P盘机器专门用来生产plots, 单独的机器用来存储为收割机程序消费. 所以需要搭建存储服务,对于服务选择来说有nfs 和samba等,此片文件将使用samba来部署. 环境搭建 假设P盘机器(A)ip为:192.168.2.152 存储机器(B)ip为:192.168.2.142 B机器 安装samba sudo apt-get upgrade sudo dpkg -l | grep samba sudo apt-get install samba samba-common B机器生产环境为磁盘阵列,为了避免数据损坏,以及存储最大化,单盘使用. 为每个盘做raid0(因为服务器前部磁盘通常链接的板卡必须要做硬raid,所以即使单硬盘使用,也需要每个磁盘做raid0,不然不识别,设置在bios中) 下面在samba服务配置文件中,为每个磁盘做共享目录设置 设置samba配置 我们拿其中一个硬盘做举例,其余的盘操作相同 sudo vi /etc/samba/smb.conf 假设第一个磁盘挂载路径为 /mnt/md0. 把当前存储机登陆账户tom添加到samba服务 sudo pdbedit -a -u tom sudo pdbedit -L 因为主要是内网使用, 直接使用当前系统账户登陆了,也可以单独创建账户登陆,因为文件写入时和当前配置账户是同一个组,避免数据权限问题. 在文件最后添加 [md0] comment = md0 path = /mnt/md0 public = no browseable = yes writable = yes available = yes valid users = tom 其他的磁盘逻辑同上. 重启 Samba 服务 sudo service smbd restart 处理完成后,存储机的配置就完成了,为每个存储磁盘创建了共享. A机器 安装cifs samba sudo apt-get install cifs-utils samba 手动将md0 挂载到当前机器目录/home/tom/md0 查看B机器uid, 在B机器终端输入id sudo mount.cifs //192.168.2.142/md0 /home/tom/md0 --verbose -o username="tom",password="123456",uid=1000,iocharset=utf8,rw,dir_mode= 0777,file_mode=0777 此时B机器的md0共享目录就被挂载到/home/tom/md0,并且只需要当前登陆账户即可读写(非root) 开机启动挂载共享目录 sudo vi /etc/fstab 尾部添加 //192.168.2.142/md0 /home/tom/md0 cifs username="tom",passwo rd="123456",iocharset=utf8,rw,dir_mode=0777,file_mode=0777,uid=1000 0 0 至此对于单盘的添加就完成了,A机器的/home/tom/md0就是B机器的共享目录md0 也就是A机器添加Plot时,最终目录选择/home/tom/md0,生成好后直接就复制到了B机器的共享目录md0,也就是到了B机器的存储第一个硬盘里