New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
encodePackage 添加 initScriptFuntion 提交交易报错 #42
Comments
是不是 tyArgs: utils.tx.encodeStructTypeTags([]) 这里有问题? |
utils.tx.encodeStructTypeTags([]) 这里是没问题的,只有在 sendTransaction 时 deserialize 才会有问题 |
sendTransaction 为什么需要 deserialize? 解析返回值么?可以帮忙再具体诊断一下。另外你本地的 starcoin 版本是? |
starcoin 1.10.0-rc.2 我排查了下, 大概问题是这样的 starcoin_types.Package 打包 init_script 的类型应该是: 代码中
这里的 scriptFunction = encodeScriptFunction() 返回的是 然后 发送交易时解析包 Package.deserialize 是按照 所以是 类型不一致造成的问题 我本地将 encodePackage 中的 encodeScriptFunction 返回值修改成 ScriptFunction 就可以跑通了 |
那就是 js sdk 的 bug 了, encodeScriptFunction 这个方法别的地方用么?是否方便提交个 pr 修复一下这个 bug。 |
这个方法其他地方有用,不能直接修改,我改一版提个 pr 吧 ~ |
在本地尝试浮现你的bug,发现两个问题:
[ fs.readFileSync( 这个参数的类型是HexString[], 而fs.readFileSync()返回的类型是Buffer, 所以不知道你这个demo是怎么跑通的。 我的test case是这样的:
不知道这个服务端报错是什么原因? |
序列化错误。你可以试试在 js 中,能不能把 transaction hex 再反解析出来 |
@wk3368 以下是我在本地的测试情况 第一个问题为了便于观察首先,我在
[
<Buffer a1 1c eb 0b 04 00 00 00 0a 01 00 06 02 06 0a 03 10 46 04 56 0a 05 60 3a 07 9a 01 89 01 08 a3 02 20 06 c3 02 03 0a c6 02 05 0c cb 02 7d 00 00 01 01 01 ... 452 more bytes>
]
[
Module {
code: Uint8Array(502) [
161, 28, 235, 11, 4, 0, 0, 0, 10, 1, 0, 6,
2, 6, 10, 3, 16, 70, 4, 86, 10, 5, 96, 58,
7, 154, 1, 137, 1, 8, 163, 2, 32, 6, 195, 2,
3, 10, 198, 2, 5, 12, 203, 2, 125, 0, 0, 1,
1, 1, 2, 0, 0, 7, 0, 2, 2, 4, 1, 0,
1, 0, 3, 0, 1, 0, 0, 4, 2, 1, 0, 0,
5, 1, 3, 0, 0, 6, 1, 3, 0, 0, 7, 1,
3, 0, 0, 8, 1, 3, 0, 0, 9, 1, 3, 0,
0, 10, 1, 3,
... 402 more items
]
}
]
{
state_root_hash: '0xcebb7ba1d2c9f73d4883a2cf63e4ad0cdecbb99c8f0a52dfe28a58d6b64dab1f',
event_root_hash: '0x414343554d554c41544f525f504c414345484f4c4445525f4841534800000000',
gas_used: 7800,
status: 'Executed',
txn_events: null,
block_hash: '0x57a60c1ff9565b2be5c11c6c59e129b81e9e3914cfa09437e5775139f55e7939',
block_number: 73,
transaction_hash: '0x071e8ee7be4e9a13d77d7a4bf695ffd61350c8eceed8b937b47ab4e85536b203',
transaction_index: 1,
confirmations: 1
}
[
'0xa11ceb0b040000000a01000602060a03104604560a05603a079a01890108a3022006c302030ac602050ccb027d000001010102000007000202040100010003000100000402010000050103000006010300000701030000080103000009010300000a010300020c06010104010d07010104020408090104010e0a010104010f0c010104080509050a050b050c05010c00030c0504010202060c0b0101080001080002060c0201060c02060c04010b0101090002060c0b01010900010b0101080002050b0101090003555344074163636f756e7405546f6b656e04696e6974046d696e7406746573745f6106746573745f6206746573745f6306746573745f6406746573745f6506746573745f660b64756d6d795f6669656c640e72656769737465725f746f6b656e0f646f5f6163636570745f746f6b656e0f6465706f7369745f746f5f73656c66076465706f736974605f54be15004c4c25a535f3281a5dbf000000000000000000000000000000010201090002010b0100020000040f0e000c010a01070038000a0138010a013200a0724e18090000000000000000000038020c020b010b02380302010200000b080e000a0238020c030a010b0338040202010000010231010203010000010231020204010000010231030205010000010231040206010000010231050207010000010231060200'
]
[
Module {
code: Uint8Array(502) [
161, 28, 235, 11, 4, 0, 0, 0, 10, 1, 0, 6,
2, 6, 10, 3, 16, 70, 4, 86, 10, 5, 96, 58,
7, 154, 1, 137, 1, 8, 163, 2, 32, 6, 195, 2,
3, 10, 198, 2, 5, 12, 203, 2, 125, 0, 0, 1,
1, 1, 2, 0, 0, 7, 0, 2, 2, 4, 1, 0,
1, 0, 3, 0, 1, 0, 0, 4, 2, 1, 0, 0,
5, 1, 3, 0, 0, 6, 1, 3, 0, 0, 7, 1,
3, 0, 0, 8, 1, 3, 0, 0, 9, 1, 3, 0,
0, 10, 1, 3,
... 402 more items
]
}
]
{
state_root_hash: '0x2c999f05e56ce69f10982b71e6eb69b8642c372085e626b58786b5d6004db06f',
event_root_hash: '0x414343554d554c41544f525f504c414345484f4c4445525f4841534800000000',
gas_used: 7800,
status: 'Executed',
txn_events: null,
block_hash: '0x441d6369f1b3ddbcadc669b7e933e9e8c0e1e209a6f09891012994ec571b3e79',
block_number: 72,
transaction_hash: '0x172c26ccff82805c6bc980643cf5d72f2a4259a8c552ea248b26487d50a09572',
transaction_index: 1,
confirmations: 1
} 可以看到,不管输入如何,在经过 const modules = moduleCodes.map((m) => new starcoin_types.Module(arrayify(m))); 之后,得到的结果是一致的,所以我们能一直部署成功吧。 第二个问题utils.tx.encodeScriptFunction export function encodeScriptFunction(functionId: FunctionId,
tyArgs: TypeTag[],
args: bytes[]): starcoin_types.TransactionPayloadVariantScriptFunction {
const funcId = parseFunctionId(functionId);
const scriptFunction = new starcoin_types.ScriptFunction(
new starcoin_types.ModuleId(addressToSCS(funcId.address), new starcoin_types.Identifier(funcId.module)),
new starcoin_types.Identifier(funcId.functionName),
tyArgs.map((t) => typeTagToSCS(t)),
args
);
return new starcoin_types.TransactionPayloadVariantScriptFunction(scriptFunction); 这里返回的是. 而 export class Package {
constructor(public package_address: AccountAddress, public modules: Seq<Module>, public init_script: Optional<ScriptFunction>) {
} 这里的 init_script 需要的是 |
你提供一下你用的address和pk? 我在本地生成一下这个TestToken.mv 我先跟你比对这个 TestToken.mv 的 fileHex 是否一样吧。 |
加了一个test case:
|
我知道这个区别是怎么回事了,你是直接应用的dist的js,所以是没有类型检查的
|
starcoin.js 版本 1.9.0
TestToken.move
deploy 脚本
在 provider.sendTransaction 时报错
The text was updated successfully, but these errors were encountered: