前言
这篇文章说下使用百度链可能遇到的问题及解决办法
创世节点账户余额最大值
cat data/config/xuper.json
所以就认为没有最大值吧 设置为多少就是多少喽
若要知道精确的 需要看下源码
转账金额大小有限制吗
./xchain-cli transfer --to XC1111111111111111@xuper --amount 20000000000000000000000000000000000000000000000000000000000000000000000
有点震惊呐 这么大都可以转账 哈哈
这个账户我也没有创建 我直接往里面转账 也是可以的?
在转账的时候同时创建好了这个账户,但不是合约账户哦
普通账户和合约账户可以是同一个账户名称
我们再来测试下哈
1、先给一个不存在的账户转账
此时会创建这个普通账户
印证了上述的猜测
调用合约 保存K-V Key和Value长度有限制吗
我测试的时候是用的36288长的字符串 是可以的
如果是 36288*2 长度 java代码已经不支持了 超过了java 字符串常量的长度
这里科普下java的基本知识
a、字符串变量: String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE = 2^zhi31 - 1 = 2147483647。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。 b、字符串常量: 如“abc”、”1234”之类写在代码中的字符串str,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式: CONSTANT_Utf8_info { u1 tag; u2 length; u1 bytes[length]; } u2是无符号的16位整数,因此理论上允许的string str的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误。
既然调用合约是通过java sdk调用 所以字符串最大不能超过java所支持的范围
测试环境
2个出块节点 1个同步节点
分别命名为 节点1 节点2 节点3
创建一个合约账户并转账 看在其他的节点是否有同步过去
- 在节点2创建一个合约账户
使用节点1账户地址访问节点2
transfer
3d6023d4a1ba08506fdd1e0ee0cc234f6d93f639a708e32ebe8d1d51d8272349
- 分别查看节点1、节点2、节点3的该合约账户的余额
节点1余额查询 1000000000
节点2余额查询 1000000000
节点3余额查询 1000000000
小结:在一个节点创建合约账户并发起转账交易 会同步给其他的节点
部署合约看是否同步
- 在一个节点部署一个合约
使用节点1的账户访问节点3
./xchain-cli wasm deploy --account XC1111111111116666@xuper --cname hello_last_1 --fee 5574291 --runtime g
invoke txid: 60b4ee039415ed2e8880212cf182361143f314f988034a669aee5be2a9c6b02a response: gas: 100608
在节点2调用合约
和节点1区别在于 key为 mac1(这个合约的key是唯一的)
invoke txid: 127ad9ea3c0071dad560fb189b6be054e9fde06dc07d2202171aed5a32f49d3b response: gas: 100609
在节点3调用合约
和节点1区别在于 key为 mac2
invoke txid: 56cd4547e266423630b6db038692bb04f0730ea207b776f55654d7d0db705717 response: gas: 100609
小结:在一个节点部署合约 会同步给其他的所有节点
- 到不同的节点查看一个hash值 看是否都一致
比如查询
60b4ee039415ed2e8880212cf182361143f314f988034a669aee5be2a9c6b02a
./xchain-cli tx query 60b4ee039415ed2e8880212cf182361143f314f988034a669aee5be2a9c6b02a
在节点1、节点2、节点3查询的交易详情内容一致
小结:在一个节点做的交易会同步给所有的节点