Nervos入门开发集合 3


#1

1/问:如何调用系统管理内的“用户管理” 的接口?
答:用这个,rust 的工具,在写contract的时候可以调用 cita-cli ,而写合约用solidity,发可以用 cli。

2/问:MacOSX 上编译cita v0.17 碰到错误,cargo 1.28.0-nightly (f352115d5 2018-05-15),xcode 9.3 ld: library not found for -lprofiler
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: aborting due to previous error
error: Could not compile cita-jsonrpc.
有人知道为什么吗?
答:推荐用 docker,原因是你本地没有一个 lib 库。

继续问: profiler? 我用brew install profiler也没有找到啊 是nnet-prof?
答:不是,是 gperftools但是,少的东西不止这一个,我建议不要折腾了。。docker 吧。
继续问:有详细的依赖库说明吗?

继续答:目前没有提供 mac 的支持,不过你如果要查依赖库的话可以去这里查 https://github.com/cryptape/cita-build/blob/ubuntu-18.04-20180703/Dockerfile

3/问:在ubuntu上可以成功编译运行吗?
答:18.04 可以,我就用这个开发的,需要装一些东西 16.04 要折腾一下,也能搞定。

4/问:是rust的运行环境吗?我的测试机器是16.04啊。
答:不止是 rust 环境。

5/问:是运行docker中的那个apt-get的命令吗?
答:16.04 除了 apt 还需要额外安装编译一些东西。

6/问:有具体的说明吗?上次用docker在Mac编译过一次,用了本地10G的硬盘啊。
答:并没有,原来折腾过,后来本机系统升级之后就没了。

7/问:现在只需要几百兆的docker文件?
答:build 的环境 2.2 G, 编译好的 release 加起来 1.9 G哦,不对,1.9g包含 各种lib库的 单纯执行文件就是 141 m。

8/问:appchain现在支持Truffle的部署框架吗?
答:支持的。

9/问:docker启动参数有具体的文档吗?
答:citarun的启动参数,可以看env.sh脚本。

10/问:https://blog.csdn.net/xiatiancc/article/details/79127891 这篇博客的介绍还能用吗?
答:不行。看官方文档吧。

11/问:官方文档在github?
**答,嗯,github上有个链接的 https://docs.nervos.org/cita/#/ 起链可以看这个章节 **
https://docs.nervos.org/cita/#/chain/getting_started

12/问:现在cita启动不支持docker-composer了?
cmd = ‘create_key_addr “{}” “{}”’.format(secret_path, address_path)
这个命令行在Ubuntu 16.04中跑不过啊,
临时文件没有创建出来,用发布版可以把默认的四个节点创建出来,但是验证节点数的时候一直是connection refused。
答:log能贴一下吗 或者任何出错的日志。
提问者上传的log:
./env.sh curl -X POST --data '{“jsonrpc”:“2.0”,“method”:“peerCount”,“params”:[],“id”:74} docker container cita_run_media_tulian_DATA_cita_secp256k1_sha3 is already running cur:(7) Failed to connect to 127.0.0.1 port 1337: Connection refused
答:为啥是localhost,你四个节点都在本机吗?
问:是的 ./env.sh ./scripts/create_cita_config.py create --nodes “127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003” 用这个命令创建的节点。
链没起来,你看下logs
问:怎么看这个log? 在bin文件夹下?
答:test-chain/0/logs。
问:看到了,有个提示说failed to open url ampq, 我需要在本地的机器上安装RabitMQ的服务吗?
答:sudo /etc/init.d/rabbitmq-server stop
重新 setup && start。

13/问:我这个机器上没安装rabbitMQ, RabbitMQ不在Docker的镜像中?
rabbitMQ安装成功后,还是一直提示 position:
Thread main panicked at failed to open url amqp://guest:guest@localhost/test2-chain/0 : Protocol(“Unexpected method frame: connection.close, expected: connection.open-ok”), /opt/.cargo/git/checkouts/cita-common-1aad419f3e80ba17/4f6bbf9/pubsub_rabbitmq/src/lib.rs:58
答:本机不要装 rabbitmq。

14/. 问:请问一笔通过交易hash请求交易回执接口,只要errorMessage为空就可以视为交易成功了吗?
答:大部分情况下可以,有些比较特殊的情况,并不行,比如创建合约的时候,
code 给 0x00000 ,并不会报错,但是这并不是正常的合约,无法部署的。

15/问:那正常的转账交易可以这么视为了?比如创建合约的时候,我可能并不会根据errorMessage了,而是看是否有合约地址。 那以为着按照正常的流程,我发起一笔交易,拿到交易hash,通过hash直接去请求回执,根据回执结果来判定交易是否成功。那么实际上交易的状态就只有交易成功和失败了,并不会有交易中的状态?
答:是的。
问:其实我就在想如果一笔交易出去,然后这个交易是正常的,但是有没有被打包确认,这个时候交易回执接口会给我什么?
答:打包会返回tx hash, 执行之后会返回receipt,没有打包查不到receipt。如果查不到,
那有可能我交易得到了hash,然后立即去请求回执接口,回执查不到,出块之后才会查到 ,本来就是要等的。

16/问:本地配置时,一直提示 amqp连接错误,有谁知道的吗? RabbitMQ需要怎么配置才能用官网的release跑通私链啊?
答:docker 里面就有 rabbitmq ,如果你的 image 正常,setup 正常,就不需要手动配置 rabbitmq 的任何东西。
问:我用的cita的image的版本是cita-run: ubuntu-18.04-20180703-solc-0.4.19 本地的docker是安装在root用户下的 和docker的用户帐号有关吗?
答:没什么关系,每次进入为同一个账户就行 docker 内部 rabbitmq 初始化没成功。
问:怎么处理呢?
答:重新 setup,如果还不行,进入 docker中,手动执行 setup 命令中执行的 shell 脚本。

17/问:需要再cita-run镜像运行时操作吗?
image 不变成 container,如何调整 里面的东西? I
docker container内部确实没有rabbitmq-server 从哪里可以找到cita-run setup 的 shell命令呢?
答,./env.sh bin/cita setup xxx 这个就是 setup ,如果你的docker image有问题,那肯定是起不来的。

18/问:tests/integrate_test/cita_start.sh 还能使用吗?
答,可以。

19/问:prooftype: 表示当前使用的共识算法,0 表示采用的 Poa 算法、1 表示采用的 Raft 算法、2 表示采用的 CITA-BFT 算法,默认采用 CITA-BFT 算法。

20/Cita的PoA的共识算法有过详细的测试例子吗?
答:没有实现。
继续问:是PoA的共识算法没实现还是共识算法的测试没实现?
答:现在只有 cita-bft 的算法实现。

21/问:目前cita-bft能实现PoA共识算法的效果吗?
答,cita-bft 你可以看成是 tedermint 的变种实现。

22/问:cita网络的无挖矿模式也是基于cita-bft吗?
答:是。

23/.问:PoA算法有规划吗?
答,目前来说,并没有。

24/问:利用nervos/appchain-truffle-migrate框架,运行 npm run migrate时,提示UnhandledPromiseRejectionWarning: Error: Returned error: Forbidden,是那个参数配置错了吗?(请看下面👇代码)
truffle-appchain.js中,nonce: ‘999999’,
validUntilBlock: 999999, 已经设置了
at XMLHttpRequest._setReadyState (/Users/caoyuanle/Documents/Nervos/Truffle-demo/node_modules/xhr2-cookies/dist/xml-http-request.js:208:14)
at XMLHttpRequest._onHttpResponseEnd (/Users/caoyuanle/Documents/Nervos/Truffle-demo/node_modules/xhr2-cookies/dist/xml-http-request.js:318:14)
at IncomingMessage. (/Users/caoyuanle/Documents/Nervos/Truffle-demo/node_modules/xhr2-cookies/dist/xml-http-request.js:289:61)
at IncomingMessage.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1081:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
(node:19883) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3) 我是在测试网上运行的
继续答:是http://121.196.200.225:1337/的链吗?你的地址发一下
继续问:0xe205617C2F441838Dcf88c9359Ed47f254Dd87C4
答:此是bug,现以修复。

25/问:你们的测试链还不是最新的?
答:225 那条,要release 了才会更新。
问:这个验证的只是value值吧? 交易数量?
答:对,这个是验证 value 必须为补全的 u256 值。

26/问:SysConfig.economicalModel=0 ,此模型下只有super_admin账户及节点地址有余额,交易需要一定的余额消耗作为“矿工费”,那如果设置为1是否理解为所有地址都有余额?变相的理解为交易不需要“矿工费” ?
答:反了, charge 有余额 charge 的意思是收费。。。
问:那就是economicalModel=0这种默认情况下,交易时不收费的?
答:是。
问:创建链的时候不配置经济模型的话默认就是不收费的?
答:恩。

27/问:请问{“jsonrpc”:“2.0”,“id”:74,“error”:{“code”:-32099,“message”:"system time out, please resend”}}这个错误可能是哪些原因导致的?
我一条链创建了两个节点,分别对应:http://47.75.56.202:2337 http://47.75.56.202:2338 ,其中2337总是出现超时,2338能正常请求,而且能查询到peerCount是1,
该机器上还同时有另外一条链两个节点,分别对应http://47.75.56.202:1337 和http://47.75.56.202:1338 这条链都正常。
答:timeout 是 jsonrpc 给消息到后面的模块,3秒未响应,可能原因有繁忙,进程没启动等情况。
问:3秒这个时间能设置放大吗?
答:可以,jsonrpc .toml 里面有个 timeout 要重启。

28/问:在经济模型为quota的情况下,有两个地址A和B,其中A为super_admin。
查询这两个地址的余额,分别是20282409603651670423947251286015 和 0
A向B进行转账,交易成功,回执errorMessage为null,打湿B的余额始终是0?
答:charge模型下 , 正常转账交易 , 扣去矿工费。
quota 模式转账是无效的。
问:那quota模更倾向于合约?
答:你就理解为免费的东西 ,随便用。

29/问:什么请求交易的时候要chain_id?
答:这个是 cita 支持 侧链,用来标识链id 的东西。

30/问:同一个链的交易,chain_id这个参数随便传有关系吗?
答:如果 id 与接收的链不符,会被拒绝掉。

31/问:那么 rebirth运行到tcp:3000跑起来就可以了对吧? 那么 rebirth对microscope的作用是什么呢? 我感觉microscope有没有rebirth都能正常运行啊? 关键 关键问题是 我不知道本地的 127.0.0.1:4000的服务从哪里来? 试过了 也不是docker里4337端口的websocket!
答:127.0.0.1:4000 指的就是 rebirth 服务, 我们运行在4000端口了。
rebirth 是区块链的缓存,可以提供一些统计数据,没有的时候 microscope 也可以查看区块信息。
某个账户的历史交易查询,这个功能没有缓存服务单靠区块链节点的RPC接口很难实现。rebirth就是用来做数据聚合和分析的,目前只有简单的区块缓存和交易缓存功能,后面可以根据开发者需求,自动配置成跟踪智能合约中某记录的缓存库。你可以认为rebirth用来把区块链的kv数据库转换成sql数据库的中间层。

32/继续问:可是 为啥我跑起来的却是tcp://127.0.0.1:3000 好迷茫啊!
继续答:默认端口是3000,你可以用 rails s -p 4000 来跑在 4000 端口上,可能哪里的文档没更新写的是 4000 吧。

33/问:今天重换账号,又出现新的错误: Error: Returned error: InvalidUntilBlock, 这两个参数怎么设置才合适呢?nonce: ‘999999’,
validUntilBlock: 999999,
答:你可以就获取当前的块高度 + 100。

34/问:新的错误,怎么设置?UnhandledPromiseRejectionWarning: Out of gas.
你自己搭的链吗? 还是测试链?
答:测试链。
答:quota你设置了多少?
问:哎,没设置啊 这个quoto是用来设置啥的?
答:这个是矿工费。先去水龙头领取测试代币
设置quota,转账1000000,合约部署要高一些。
问:部署合约我就设置999999没出现过问题。 在免费模式下,这个参数是不是可以为0?
答:999999实际上是个很小的量,部署合约最好大点。
获取测试币的的水龙头地址:https://dapp.cryptape.com/faucet/

35/问:这个提示信息,我想加入合约的名字,怎么修改contract deployed successful, address: 0x1E464871bc6870B169E69E876f6006fE17e99a63?
答:你用sdk的话我建议看看他们源码里面的单元测试;我用java版本的话就是这么干的。

36/问:2_deploy_contracts.js 里面 var artifacts
if (artifacts) {
var XMToken = artifacts.require("./XMToken.sol");一直没有调用到?需要怎么设置呢?
答:这一行是部署到以太坊的方法, 所以部署到 cita 的流程中这一行不会执行

37/问:nervos@appchain现在和web3的兼容性如何?
答:针对以太坊的web3操作,用户可以直接嵌入以太坊的web3.js,nervos.js只负责和appchain的交互。neuron客户端同时支持两个平台。

38./问:web3.appchain支持web3 1.0.x的操作吗?
答:目前 nervos.eth 还保留了 1.0.x 的方法, 但是建议另外引入 web3。
如果 dapp 开发中同时涉及 AppChain 和 Ethereum 交互, 建议构建两个实例, 一个是 nervos, 一个是 web3。

39/问:cita中的quota相当于ethereum的gas?
答:相当于 ethereum 中的 gasLImit。
继续问:那个参数相当于gas?
答:在 transaction 结构体中相当于 gas。

40/问:之前看到有人关于添加节点的问题,提到cita目前不支持节点的发现功能,所以添加节点时需要预先通知各个节点?
答:是的,记账节点的添加需要通知每一个记账节点更新配置,非记账节点只需要通知自己打算连接的几个节点就可以了。这方面确实是不足,我们正在全力开发P2P连接机制。

41/问:cita v0.17中系统默认的代币的代码在哪里?
答:scripts/config_tool/create_genesis.py。
问:系统默认代币是rust写的,随系统一起编译的吗?
答,:account加个blance字段存储token值,token信息在系统合约,你说的很泛,不太清楚你意思。
问:这些token都会自然存储在指定的address?
答:私链charge模型就行。想要给指定地址token就改我刚刚给你的脚本。

42/问:self.accounts[‘0xf7BEb024F1D661B8fFC67EfD4fb5d536C35a11f2’] = {
‘balance’: ‘100000000000’,
}
答:直接在set_account_value添加这行代码,会导致cita_start.sh执行时出现check height growth timeout的错误
self.accounts[addr] = {
‘code’: ‘’,
‘storage’: {},
‘nonce’: ‘1’,
‘value’: value,
} 你把地址append这里就好了阿。

43/问:那balance的值怎么设置呢?
答:就是value。

44/问: 普通节点的加入,也需要像共识节点那样,预先通知所有的节点吗?
答: a是的,每个节点要在配置文件里面配置它能连接的节点信息,否则无法连接。

45/问:nervosswift库停止开发了?https://github.com/cryptape/nervos-swift-stopped
答:没有,我们重构代码了,所以新开了一个repo。

46/问:nervos-swift内部的pod依赖没有更新啊?
答:我们目前优先重构了 nervos-swift 这个库,neuron-swift 会逐步接进去,最近 iOS 的部分同事在休假,所以进度上慢一点。

47/问:请问节点的地址 在每个节点的目录下面没有存储吗? 还是只有template的authorities下有存储?
答:有私钥,可以直接算地址,并没有显式保存地址。

48/问:目前多台服务器上部署一个链,需要在任何一台已有该链节点的服务器上通过create_cita_config.py append的方式创建一个节点,然后将新节点的目录copy到新的服务器上,这样的话意味节点的私钥都是别人知道的?至少append这个节点的人知道。
答,这个东西是可以调整的,节点管理文档,可以提升或者下降对应节点的权限,拿到节点后,就可以调整了。
如果你了解深一点,你就会知道,其实,只要拿到创世块信息,链的管理者愿意让你加入这条链,根本不需要管理员去增加节点 自己就可以操作。

49/问:Compiling sodiumoxide v0.1.0
error[E0432]: unresolved import ffi::crypto_aead_chacha20poly1305_encrypt_detached
–> /opt/.cargo/registry/src/mirrors.ustc.edu.cn-12df342d903acd47/sodiumoxide-0.1.0/src/crypto/aead/chacha20poly1305.rs:6:11
|
6 | crypto_aead_chacha20poly1305_encrypt_detached,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no crypto_aead_chacha20poly1305_encrypt_detached in the root. Did you mean to use crypto_aead_chacha20poly1305_encrypt?

error[E0432]: unresolved import ffi::crypto_aead_chacha20poly1305_decrypt_detached
–> /opt/.cargo/registry/src/mirrors.ustc.edu.cn-12df342d903acd47/sodiumoxide-0.1.0/src/crypto/aead/chacha20poly1305.rs:7:11
|
7 | crypto_aead_chacha20poly1305_decrypt_detached,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no crypto_aead_chacha20poly1305_decrypt_detached in the root. Did you mean to use crypto_aead_chacha20poly1305_decrypt?
cita编译的时候出现了这个错误,请问是什么原因呢?
答:你的本地 libdiumoxide 库版本不对,用docker 编。

50/问:cita的创世块中的value设置时需要乘上10^18次方吗?
答:创世块的 value 是 u256。

51/问:ECC secp256k1 在安卓苹果 Java后台的使用方法 有没有IOS和Android的SDK?
答:nervos-swift 已经开源了,Android版的还在整理,近期会开源出来。

52/问:Object-c的有吗?
答:我们没有开发objc的版本。

53/问:在CentOS搭建cita链时,遇到了3个问题:
1.同一台服务器的四个节点,是如何关联到一条链上的,是通过配置文件吗,关联四个节点到同一条链的配置文件在哪里?
2.如果我在四台不同的服务器上,每台服务器一个节点,如何把这四个节点到一条链上?
3.我在执行启动节点操作之后(./env.sh tests/integrate_test/cita_start.sh),如何验证成功关联了所有节点?
./env.sh …
network
答:https://docs.nervos.org/cita/#/rpc_guide/rpc?id=peercount

54/问:你好,我在使用这个工具的时候,编译合约出来的function都是null,请问是什么问题?
答:编译合约直接用容器里的 solc 。

55/问:这个指令里的id:74 是什么id?
connection refused通常是什么原因?
答:看一下你的链启动情况,以及rpc地址。

未完。。。。待续!若上述有错误,请及时在下面回帖回复指正,谢谢!