8. FAQ

8.1. 合约开发建议采用哪种开发语言?建议使用的开发工具是什么?

建议开发语言:rust,合约内可以引用大多数外部依赖(如:含随机数的不可用)。 建议开发工具:vscode,+ 插件:rust-analyzer

8.2. 智能合约中PutState有两个参数是什么意思?

func PutState(key string, field string, value string) ResultCode

实际存储到leveldb的key为:contractName + “#” + key + field

长度限制: key:64、 field:64、 value:1M

且key、field符合正则^[a-zA-Z0-9._-]+$,只能为英文字母、数字、点、横杠、下划线

两个参数的原因:一个逻辑性的命名空间概念,key作为namespace一般为有规律的值

8.3. 不同组织间有没有共同的ca?

不同组织间的CA证书可以使用同一个。但是不建议这样做,建议是一个组织一个CA证书。

# 各组织不同CA配置
trust_roots:
  - org_id: "wx-org1.chainmaker.org"
    root: "ca1.crt"
  - org_id: "wx-org2.chainmaker.org"
    root: "ca2.crt"
  - org_id: "wx-org3.chainmaker.org"
    root: "ca3.crt"
    
# 各组织相同CA配置
trust_roots:
  - org_id: "wx-org1.chainmaker.org"
    root: "ca1.crt"
  - org_id: "wx-org2.chainmaker.org"
    root: "ca1.crt"
  - org_id: "wx-org3.chainmaker.org"
    root: "ca1.crt"

8.4. 组织间的数据能否实现哪些数据可以公开给对方,哪些数据不能公开给对方

上链数据均共享。可以根据场景需要,采用混合加密、分层身份加密、同态加密、零知识证明等方式保护数据隐私

8.5. 合约代码是否需要每个组织节点都部署?

合约代码部署也是一个交易。发送给某个节点后,该节点会把交易广播到自己的网络中。其他节点也就有了这个交易了。交易上链需要各个节点达成共识,其他共识节点也会执行该交易。