FISCO BCOS Solidity 智能合约Compiler error:Stack too deep, try removing local variables 如何传递超过16个参数变量
  DJsdk34H4Gbu 2023年11月02日 44 0


一、原因:

stack 保存很小的局部变量,免费使用,但有数量限制(16个变量),包含参数和返回值(including parameters and return parameters)


二、解决方法:

1. 减少输入参数:

a. 以数组的方式传入

原来是

// 设置用户信息
function set_user_info(string user_address, string name, string age) public returns(int) {

TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("user");

Entry entry = table.newEntry();

entry.set("user_address", user_address);
entry.set("name", name);
entry.set("age", age);

int count = table.insert(name, entry);

}

可修改为

// 设置用户信息
// user_info是一个数组,如["xxxxx", "张三", "20"]
function set_user_info(string[] user_info) public returns(int) {

TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("user");

Entry entry = table.newEntry();

entry.set("user_address", user_info[0]);
entry.set("name", user_info[1]);
entry.set("age", user_info[2]);

int count = table.insert(user_info[0], entry);

}

这种方法比较适合传入一组数据

b. 可拆成两个小函数

// 设置用户信息-姓名
function set_user_info_name(string user_address, string name) public returns(int) {

TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("user");

Entry entry = table.newEntry();

entry.set("user_address", user_address);
entry.set("name", name);

int count = table.insert(user_address, entry);
return count;


}


// 设置用户信息-年龄
function set_user_info_age(string user_address, string age) public returns(int) {

TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("user");

Entry entry = table.newEntry();
entry.set("age", age);

Condition condition = table.newCondition();
condition.EQ("user_address", user_address);


int count = table.update(user_address, entry, condition);
return count;

}

这种方法比较适合传入多组数据


2. 减少返回参数:

a. 以数组的形式返回

原来

// 得到用户信息
function get_user_info(string user_address) public returns(string name, string age) {

// xxxx
return (name, age);

}

可改为

// 得到用户信息
function get_user_info(string user_address) public returns(string[] user_info) {

// xxxx
user_info['name'] = '张三';
user_info['age'] = 20;

return user_info;

}



3. 将参数拼接成字符串






【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
DJsdk34H4Gbu