我在使用Typescript的Neo One for Neo Smart Contracts框架遇到麻烦。我正在收到此错误“部署→无效格式:整数太大:66547> 65536:-32603 ”。没有行号发生此问题,并且有时似乎此错误被随机调用。
这是现在发生的行。this.orderExist()..:
public sendORDERS(orderId : Fixed<8>, actorAddress : Address){
if(this.onlyBy(actorAddress) &&
this.orderExist(orderId, false)){ //error
//
// only comments
}
}
被调用的函数如下所示:
@constant
public orderExist (orderId: Fixed<8>, state: boolean){
const currentState = this.getOrderState(orderId);
if(currentState == 0 && state == false)
return true;
else if(currentState != 0 && state == true){
return true;
}
return false;
}
和getOrderState()看起来像这样:
@constant
public getOrderState(orderId: number): Fixed<8>{
const state = this.orderState.get(orderId);
return state === undefined ? 0 : state;
}
有任何想法吗?我正在使用打字稿3.6.3,它应该与Neo One Framework兼容。
提前致谢。
问题是我的合同太大(代码太多)。这也导致了“未知错误”。
这是智能合约的已知限制。智能合约大小(以字节码为单位)有一个硬限制,并且编译与NeoVM最大数量大小有关的大型合约也存在类似的困难。解决方法是仅在绝对必须执行的智能合约中执行逻辑在区块链上(即在NeoVM中),也可以将智能合约拆分为多个智能合约,然后彼此调用以获取不同的逻辑。