web3j的StaticArray是抽象的
web3j's StaticArray is abstract
我在 macOS 上使用最新的 solc 和 web3j(通过 brew)。
我已经编译了 smartcontract 并生成了 java 代码以在我的项目中使用,但是生成的代码使用了抽象的 StaticArray:
error: StaticArray is abstract; cannot be instantiated Arrays.<Type>asList(new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
我在 Solidity 中的构造函数如下所示:
constructor(string[] memory foo1, bytes[keyByteSize] memory foo2, bytes[keyByteSize] memory foo3, bytes[keyByteSize] memory foo4)
部署函数生成为:
String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new org.web3j.abi.datatypes.DynamicArray<org.web3j.abi.datatypes.Utf8String>(
org.web3j.abi.datatypes.Utf8String.class,
org.web3j.abi.Utils.typeMap(foo1, org.web3j.abi.datatypes.Utf8String.class)),
new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
org.web3j.abi.datatypes.DynamicBytes.class,
org.web3j.abi.Utils.typeMap(foo2, org.web3j.abi.datatypes.DynamicBytes.class)),
new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
org.web3j.abi.datatypes.DynamicBytes.class,
org.web3j.abi.Utils.typeMap(foo3, org.web3j.abi.datatypes.DynamicBytes.class)),
new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
org.web3j.abi.datatypes.DynamicBytes.class,
org.web3j.abi.Utils.typeMap(foo4, org.web3j.abi.datatypes.DynamicBytes.class))));
return deployRemoteCall(Foo.class, web3j, credentials, contractGasProvider, BINARY, encodedConstructor);
}
是bug还是我做错了什么?
事实证明 web3j 不支持实验性 ABI
我在 macOS 上使用最新的 solc 和 web3j(通过 brew)。
我已经编译了 smartcontract 并生成了 java 代码以在我的项目中使用,但是生成的代码使用了抽象的 StaticArray:
error: StaticArray is abstract; cannot be instantiated Arrays.<Type>asList(new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
我在 Solidity 中的构造函数如下所示:
constructor(string[] memory foo1, bytes[keyByteSize] memory foo2, bytes[keyByteSize] memory foo3, bytes[keyByteSize] memory foo4)
部署函数生成为:
String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new org.web3j.abi.datatypes.DynamicArray<org.web3j.abi.datatypes.Utf8String>(
org.web3j.abi.datatypes.Utf8String.class,
org.web3j.abi.Utils.typeMap(foo1, org.web3j.abi.datatypes.Utf8String.class)),
new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
org.web3j.abi.datatypes.DynamicBytes.class,
org.web3j.abi.Utils.typeMap(foo2, org.web3j.abi.datatypes.DynamicBytes.class)),
new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
org.web3j.abi.datatypes.DynamicBytes.class,
org.web3j.abi.Utils.typeMap(foo3, org.web3j.abi.datatypes.DynamicBytes.class)),
new org.web3j.abi.datatypes.StaticArray<org.web3j.abi.datatypes.DynamicBytes>(
org.web3j.abi.datatypes.DynamicBytes.class,
org.web3j.abi.Utils.typeMap(foo4, org.web3j.abi.datatypes.DynamicBytes.class))));
return deployRemoteCall(Foo.class, web3j, credentials, contractGasProvider, BINARY, encodedConstructor);
}
是bug还是我做错了什么?
事实证明 web3j 不支持实验性 ABI