Date: 2023-09-14 Source: 本站
学习区块链就是不断踩坑积累的过程,为方便大家更好地从前人中总结经验,我们将FISCO BCOS社群中高频次、高质量的技术提问与探讨沉淀下来,集合成常见FAQ,作为一手学习材料,供大家随时查阅。
本篇收录了关于“智能合约”的常见问题。智能合约是应用开发中必不可少的一环,帮助区块链实现复杂的业务逻辑,极大地推动了区块链技术发展,加速应用落地。
A1 :链下。
A2 :可以看这个字段。
Q3 :智能合约部署后,这个CALLDATA位置应该如何输入进行测试?
contract StorageStructure { address public implementation; address public owner; mapping (address => uint) internal points;uint internal totalPlayers;}contract ImplementationV1 is StorageStructure {modifier onlyOwner() { require (msg.sender == owner); _; }function addPlayer(address _player, uint _points) public onlyOwner { require (points[_player] == 0); points[_player] = _points; }function setPoints(address _player, uint _points) public onlyOwner { require (points[_player] != 0); points[_player] = _points; }}
A3 :input对应的位置,calldata相当于直接把input传进去。
A4 :可以用WeBASE的IDE。
A5 :1、控制台的 solcJ 需要替换为国密版 ;2、applicationContext.xml 中的如下配置也需要相应的修改。
A6 :是的。
A7 :编译不通过的情况,请检查合约。
A8 :bytes32要用这种格式输入,长度要一致,在页面加个限制;
0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20。
A9 :合约地址是通过部署合约的这个账户地址+nonce,算一个哈希之后取前面一段得到,用户的nonce每次用户部署的时候递增;相同的账户,不同的群组,nonce是独立的,都是从相同的值开始递增。
A10 :不能。
A11 :SDK暂时没有接口可以查询这个信息。如果使用mysql存储了,可以链下查询_sys_tables_表,用户表以u_前缀开头。
A12 :合约地址不会被复用。部署新合约,使用新地址,通过接口或表访问老数据即可。
Q13 :如何通过SDK发布我的合约, 没有发现 deployByCNS 这个方法,是这个类部署合约?
A13 :通过SDK发布合约,需要调用java合约类的deploy静态方法,和deployByCNS无关。
A14 :如果子合约没有重写父合约的函数,则父合约里的值不会变化,因为被调用的函数是子合约的函数;否则父合约里的值会变化,因为被调用的函数是父合约的函数。
A15 :可以在本地把数据加密。
A16 :将yml中keyServer配置加上Webase-node-manager的ip port 。
A17 :把evmc文件夹删掉,重新执行cmake,然后再编译试试。
A18 :在智能合约中可以调用其他合约的接口,但是不能访问外部的数据和外部的接口。
A19 :文件编码格式有问题,最好都是utf-8。
Q20 :在复杂的表结构里需要连接操作和复杂查询 ,但是Solidity本身应该是不支持的。所以要用传统sql进行CRUD,只用区块链做同步操作,但是这样具体怎么做?怎么在区块链用sql语句对数据库里进行操作?
A20 :不支持,也不建议这样用。写一个 sendSQL(string sqlstr) 接口的合约,发交易调用它发送sql其他节点同步区块和交易列表,获得这个交易,再执行sql。但这里面会有很多复杂的不一致性问题,不是区块链应该的用法。
A21 :参照示例即可,测试脚本需要像示例那样实现自己的init, run, end逻辑,然后写好配置文件,caliper就会按照配置自动跑测试了。
Q22 :交易服务的合约地址查询接口:响应参数返回的合约地址,永远都是0x0000000000000000000000000000000000000000
A22 :合约地址为0x0可能是合约部署失败了。
A23 :合约是被调用方,一般是外部服务调用合约,将数据或校验结果上链,上链的时候会带上身份,合法的身份信息能被合约认可。
A24 :修改为bid(uint256,uint256,uint256)。
A25 :控制台的话会有个getDeployLog的命令,查看已经部署的合约地址的列表 。
A26 :没有,这是个批量查询操作,用webase,浏览器或者自行实现检索。
A27 :要用链管理员授权另一个管理员,sdk要配置了encryptType为1,编译的合约要用国密版的进行编译。
A28 :类似数据库的查询,是一次调用而非交易,不消耗gas, 不需要共识。
公众号对话框回复【学习资料】可获得FISCO BCOS全套学习材料。
如果在FAQ中未能找到您的问题,可以添加小助手微信(FISCOBCOS010)进技术群提问交流,点击下方“阅读原文”,告诉我们您对内容的意见与建议。
如果您发现平台中有错误或是想提出功能请求,欢迎进入项目GitHub界面,提issue反馈遇到的问题和建议;如果只是小问题,您也可以顺手提PR进行修改。提交issue/PR的流程请参考《揭秘FISCO BCOS开源项目开发协作》。