社区问答精选——长安链开发知多少?

长安链社群及社区issue中每周都会产生一些常见问题,我们整理了近期社群的一些问答以供参考(社群中部分优质问题连贯性不足未能收录,欢迎点击公众号菜单栏加入社群共同交流)。有更多问答在社区issue中描述的更为细致,开发者提问前可以先按照关键词进行搜索。

欢迎各位开发者按照问答template提交issue,也欢迎有意愿的开发者参与到社区issue版块维护中。

issue问答合集链接:

https://git.chainmaker.org.cn/chainmaker/issue/-/issues?scope=all&utf8=%E2%9C%93&state=all

社群问答精选

安装配置

1. Q:区块链部署go合约时失败,投票过后时进行报错,服务器linux端已进行go get;使用命令行可以成功部署go合约,但管理台无法正常部署。

A:自查其他合约是否正常部署,判断链是不是有问题;

如果其他合约通过,再自查docker合约相关的环境是否正常启动、包含docker-vm,7z等。

2. Q:请问一下,有快速降低链版本的方法吗?

A:降低链版本最好的方法是重新建链,因为已有的链如果版本比较高,版本再降低的话交易验证可能有问题。

3. Q:管理台部署后怎么移除干净呢,只是删掉容器就可以了嘛?

A:docker-compose down -v。

4. 请问2.3.x版本支持跨链吗?

目前已发布的2.3.x版本暂时不支持,可以期待一下后续版本。

5. Q:Mac 启动管理平台报。ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries 这个错误,怎么解决吗?(mac芯片为M1)

A:目前管理台没有发布arm架构的镜像,可以自己通过源码打包一个;管理台部分的代码库中有Dockerfile文件,可以通过docker build来创建镜像,然后在那个docker-compose.yml文件中调整镜像就可以了。

6. Q:历史迭代器是否支持2.3.x的链,我这样使用正确吗?sdk.Instance.NewHistoryKvIterForKey,使用sdk.Instance.GetStateByte能得到最新的数据,但是使用NewHistoryKvIterForKey,会发生timeout。

社区问答精选——长安链开发知多少?_第1张图片

社区问答精选——长安链开发知多少?_第2张图片

A:模拟器运行的迭代器未支持,链上是支持的。

7. Q:chainmaker-sdk-java 2.3.0  配置2个节点连接, 每个节点4个连接 , 结果发现:节点1创建了7个连接  节点2建了1个连接?  

A:2.3.0加入了连接池,会自动根据网络状况优化连接数。( 每个节点4个连接 ,这个配置是多余的未使用到)

新建连接步骤如下:

1、获取连接数最少的节点;

2、建立连接;

3、若此时建立连接失败,则排除该节点,重复1-2;

4、若全部节点都建立连接失败则抛出异常。

8. Q:v2.3.0版本加入由v2.1.0 组成的共识网络失败。

A:2.1.0升级到2.3.0版本不支持这种混搭部署的模式,2.2.x版本才可以实现无缝升级。

存储

9. Q:过查询数据归档中心的当前已归档数据状态,得到 archived-status height 1745 , inArchive false 结果,其中这个 inArchive false 是什么意思呢?

A:代表没有链正在做归档操作。

10. Q:磁盘满了,节点中的日志太多了,这些日志可以删除吗?

A:没有需要修复的bug日志就可以删除,最新的几个可以留一下,其他的都可以删除。

11. Q:SQL初始化合约的时候创建表,文档里没看到删除表,drop DB的操作,这些功能支持吗?

A:区块链上不允许删除表。

Q:db和表都不支持删除?

A:不支持,除非在归档的时候才会删除部分数据;用户写的SQL合约,可以在升级合约的时候执行DROP TABLE语句。

隐私计算

12. Q:测试官网的paillier算法的智能合约编写有几个包找不到,有遇到这种情况的吗?是官网的智能合约。

社区问答精选——长安链开发知多少?_第3张图片

A:

需要import "chainmaker.org/contract-sdk-tinygo/sdk/convert"。

详情可以参考文档:https://docs.chainmaker.org.cn/instructions/%E4%BD%BF%E7%94%A8Go%28TinyGo%29%E8%BF%9B%E8%A1%8C%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E5%BC%80%E5%8F%91.html。

13. Q:隐私计算必须需要tee硬件环境吗。虚拟机是否可以支持?、

A:虚拟环境不支持。

所有chainmaker节点都是需要硬件环境,还是只有部署graphene和chainmaker-tee的节点才需要硬件环境?

只有tee节点需要。

预言机

14. Q:预言机取到的数据返回到哪里啊?

A:预言机的数据应该返回到对应的预言机合约,预言机合约再调用业务合约通知链下数据。

15. Q:通过预言机把数据取到链上后,这个数据是加密了吗?要如何解密啊?

社区问答精选——长安链开发知多少?_第4张图片

社区问答精选——长安链开发知多少?_第5张图片

A:base64的编码。

智能合约

16. Q:我现在想把rust合约改成go的合约,那之前已上链的数据还能通用吗?go合约里的字段和方法逻辑与rust的一样。

A:可以先洗一遍数据。再升级到新合约。就是在wasmer里先把数据解析好,重新按go和rust都能解析的方式写入。然后再升级。

17. Q:使用DOCKER_GO(tag:2.3.1),日志中有错误提示,部署合约失败,什么原因?

社区问答精选——长安链开发知多少?_第6张图片

A:vm-engine采用cgroup限制资源,目前只支持cgroupv1,在2.3.2版本会支持v2。如果你是v2版本,目前可能需要降级到v1,您可以执行stat -fc %T /sys/fs/cgroup/看看,如果是cgroup2fs就是v2,如果是tmpfs就是v1。如果您使用ubuntu22,建议降级一下,我们在232版本会支持v2。

18. Q:VM换了,之前rust合约里边有个序列化,在GO这边不支持导致历史数据无法查询。请问调用合约时可以指定一个版本号吗,不然新合约和历史合约遇到这种情况就难搞了啊。

A:不可以指定版本号。

19. Q:长安链的DAG并行调度是以合约为维度的吗,还是可以更细粒度到同一合约下的事务KEY上?比如同一个转账合约,A到B转账,C向D转账。能并行吗

A:调度冲突是以读写集作为判断维度的;可以并行

Q:那如果涉及到跨合约调用呢。也是一样的是吗,跨合约调用本身算事务吗,比如C1合约调转账合约C0,C2合约也调转账合约C0, 它们也能并行是吗?

A:并行,看是否会有冲突的k,假如在被调用的合约中使用了相同的k则表示冲突;如果跨合约调用中使用到了相同的读写集,则会冲突,否则不冲突。

其他问题

20. Q:长安链中,一个链可以有些证书使用国密有些使用非国密吗?

A:不可以;

Q:那在数据库里面,链的表没有标识国密还是非国密,它是怎样区分的?

A:根据链配置里的哈希类型,以及每个证书里带的签名类型。

21. Q:长安链中的sdk.Instance.GetSenderAddr()这个函数获取的交易方地址,可以伪造吗?

A:可以伪造,那样的话那个节点就是恶意节点。他的交易不会通过共识的。

22. Q:节点运行的cpu占用率和区块高度有关系吗?目前压测的区块高度到10多万了,每个块内最高交易笔数配的1000笔。突然出现一个问题,收交易的节点cpu占用率比较高,4核的,很快就跑满了。

A:收交易节点需要广播,会有大量的序列化/反序列化操作,所以cpu占用率比较高。

23. Q:fabric里的多通道对应长安链里的那个技术呀?

A:多链;

Q:最多支持几条链?

A:没有限制。

24. Q:我看日志的时候发现偶尔会有verify block repeat,然后会有block illegal,想请教一下这个是什么原因?(节点为共识节点)

A:在共识过程中,区块有两个来源,一个是共识过程中通过提案获取到的,另外一个是如果这个节点慢了的话,就会触发同步过程,由同步模块从其他节点同步过来,但是两者都会进行区块校验,所以会产生同一个区块的两次校验,说明这个节点应该是慢了。

你可能感兴趣的:(区块链)