solidity编写智能合约遇到的各种问题

Posted 一袋芋头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solidity编写智能合约遇到的各种问题相关的知识,希望对你有一定的参考价值。

solidity编写智能合约遇到的各种问题

合约部署

该篇文章中介绍了一些合约部属时遇到的简单问题,Mark一下省的以后我也遇到。
https://blog.csdn.net/qq_41066280/article/details/103946600?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242

1.creation of XXXXX errored: transaction execution failed

编译完事后直接部署有可能失败,查看具体信息发现gas不够,在编译时选择启用优化即可

2.creation of CS errored: Error encoding arguments: SyntaxError: Unexpected token x in JSON at position 47

这篇文章中也讲述了一些遇见的问题
https://www.jianshu.com/p/6140660d4dd8?utm_campaign=maleskine
通常遇到上述错误是因为json数据格式出现问题,说明编译.sol文件生成.json文件解析出现了问题。而且这种问题可能是truffle不同版本进行编译产生的error

或者是传递参数时出现了问题,比如说字符串没加双引号什么的了,我的合约需要两个address型参数.

当时怀疑传递的格式有问题,但是在这个界面怎么改也改不过来。。直到发现了这里的展开按钮。。

输入地址竟然部署成功,然后再折叠对比一下

竟然多了双引号!!!
总算成功解决。强烈建议展开输入参数!
总结:传递地址型参数时要加""
字符串也要加""

合约调用

1.通过接口调用其他.sol文件内的函数

需求:将主合约中的部分功能模块化,拆分成独立的子合约,然后通过调用该子合约的接口来实现所需功能。
要将子合约先行部署

测试实例:子合约two实现数组求和

pragma solidity ^0.4.18;

contract two
	uint summ = 0;
	function sum(uint[] datas)public returns(uint) 
		for(uint i =0; i< datas.length; i++)
			summ += datas[i];
		
		return summ;
	

Remix编译通过后部署,合约地址为:0x08970fed061e7747cd9a38d680a601510cb659fb

主合约cs中设接口及其实例化

pragma solidity ^0.4.18;

contract two
	function sum(uint[] datas)public returns(uint);

contract cs
	uint[] public scores;
	uint public scoresum;

	function init() public
		for(uint i = 0; i < 5;i++)
			scores.push(i * 10);
		
	

	two mytwo = two(0x08970fed061e7747cd9a38d680a601510cb659fb);//部署two的地址
	function ssum()public 
		scoresum =  mytwo.sum(scores);
	

代码说明

步骤:
1.主合约中定义接口
2.实例化接口
3.调用接口,传递参数。

部署主合约
注意两张图画方框的地方,子合约的地址要一致

验证通过,开始干活!

solidity的数据结构

1.Mapping的删除

情景:在完成操作后要将本次使用过的一些mapping数据删除(或重置),以供下次或其他人使用合约的状态变量

注意:
mapping的delete:只是删除对应某个key的value,而不能直接删除整个mapping,所以要想删除该mapping的每一个key时,往往要把每一个key放进一个动态数组,然后遍历该数组进行删除。

问题:如果要删除一个mapping里的另一个mapping,是直接删除外层mapping,还是要把里层mapping的每个Key都删除?

篇幅太长,移步:
solidity编程中遇到的各种问题–数据结构篇

以上是关于solidity编写智能合约遇到的各种问题的主要内容,如果未能解决你的问题,请参考以下文章

solidity 智能合约(3):使用truffle编译部署及测试合约

Solidity智能合约单元测试介绍

Solidity智能合约单元测试介绍

区块链之智能合约 solidity踩坑 --上篇

solidity(solc)智能合约升级到0.5*遇到的问题

区块链开发之Solidity智能合约开发