前端代码中已经实现多版本编译器切换的功能,但实际只支持 v0.4.26 。主要原因是碰到一个技术难点。
remix 编译 solidity 是在 webworker 中进行的。经我测试发现在 webworker 中用星火链网的 v0.4.26 版本编译器编译合约会报错 Maximum call stack size exceeded ,但是在主线程中编译就不会报错。所以目前就只能支持一个版本,且只能在主线程中编译。
我大概研究了下报错原因。应该是因为星火链网改了 solidity 源码,导致递归计算次数变多了,超出了 webworker 的 call stack 上限。需要 @caict-develop-zhangbo 同学帮忙看下是否可以优化下 solidity 源码,减少递归计算次数。
如果递归计算次数无法减少,那就只能退而求其次,部署一个后端服务,专门为前端提供编译服务。
另外,还有一个方案可以尝试,就是在主线程中实现多版本编译器支持,但当时 remix 没有选择这么做,可能会存在什么坑,不一定走的通。
前端代码中已经实现多版本编译器切换的功能,但实际只支持 v0.4.26 。主要原因是碰到一个技术难点。
remix 编译 solidity 是在 webworker 中进行的。经我测试发现在 webworker 中用星火链网的 v0.4.26 版本编译器编译合约会报错
Maximum call stack size exceeded,但是在主线程中编译就不会报错。所以目前就只能支持一个版本,且只能在主线程中编译。我大概研究了下报错原因。应该是因为星火链网改了 solidity 源码,导致递归计算次数变多了,超出了 webworker 的 call stack 上限。需要 @caict-develop-zhangbo 同学帮忙看下是否可以优化下 solidity 源码,减少递归计算次数。
如果递归计算次数无法减少,那就只能退而求其次,部署一个后端服务,专门为前端提供编译服务。
另外,还有一个方案可以尝试,就是在主线程中实现多版本编译器支持,但当时 remix 没有选择这么做,可能会存在什么坑,不一定走的通。