bitlayer-org/BitVM-Research

为什么挑战响应交易脚本中没有时间锁呢?

Opened this issue · 4 comments

感谢0xhhh写的bitvm research文章和这个例程序,解答了我的大部份疑惑。不过目前还是有写细节没搞清楚。

按照我的理解,在挑战响应交易过程中,当挑战交易发起时,为了防止prover一直不发响应交易,应该有一个时间锁,过期后资金自动划给verifier。但是在process_trace中,只有整个挑战响应流程结束后才将资金转出。

下面是process_trace中的挑战和响应交易,并没有时间锁出现
await send_tx(
"First Round Challenge",
gate1.p2tr.challenge_p2tr,
gate1.p2tr.response_p2tr.address!,
NAND_1_challenge_inputs,
keypair,
);
await send_tx(
"First Round Response",
gate1.p2tr.response_p2tr,
gate2.p2tr.challenge_p2tr.address!,
NAND1_response_inputs,
keypair,
);

await send_tx(
"Second Round Challenge",
gate2.p2tr.challenge_p2tr,
gate2.p2tr.response_p2tr.address!,
gate2.inputs.challenge_inputs,
keypair,
);
await send_tx(
"Second Round Response",
gate2.p2tr.response_p2tr,
gate3.p2tr.challenge_p2tr.address!,
gate2.inputs.response_inputs,
keypair,
);

await send_tx(
"Third Round Challenge",
gate3.p2tr.challenge_p2tr,
gate3.p2tr.response_p2tr.address!,
gate3.inputs.challenge_inputs,
keypair,
);
await send_tx(
"Third Round Response",
gate3.p2tr.response_p2tr,
"mscxdTxVSoR8VyRkZEGJ4dxECJXcXfQqVz", // prover addr
gate3.inputs.response_inputs,
keypair,
);

can you post a link to the code snippet you mentioned?

hey there:

await send_tx(

in this func: process_trace
u send a tx named "First Round Challenge" and then a "First Round Response" tx. i think both two tx need time-lock which prevent someone ignore it
i'am not sure if i understand the process correctly. hope ur comment~

感谢0xhhh写的bitvm research文章和这个例程序,解答了我的大部份疑惑。不过目前还是有写细节没搞清楚。

按照我的理解,在挑战响应交易过程中,当挑战交易发起时,为了防止prover一直不发响应交易,应该有一个时间锁,过期后资金自动划给verifier。但是在process_trace中,只有整个挑战响应流程结束后才将资金转出。

下面是process_trace中的挑战和响应交易,并没有时间锁出现 await send_tx( "First Round Challenge", gate1.p2tr.challenge_p2tr, gate1.p2tr.response_p2tr.address!, NAND_1_challenge_inputs, keypair, ); await send_tx( "First Round Response", gate1.p2tr.response_p2tr, gate2.p2tr.challenge_p2tr.address!, NAND1_response_inputs, keypair, );

await send_tx( "Second Round Challenge", gate2.p2tr.challenge_p2tr, gate2.p2tr.response_p2tr.address!, gate2.inputs.challenge_inputs, keypair, ); await send_tx( "Second Round Response", gate2.p2tr.response_p2tr, gate3.p2tr.challenge_p2tr.address!, gate2.inputs.response_inputs, keypair, );

await send_tx( "Third Round Challenge", gate3.p2tr.challenge_p2tr, gate3.p2tr.response_p2tr.address!, gate3.inputs.challenge_inputs, keypair, ); await send_tx( "Third Round Response", gate3.p2tr.response_p2tr, "mscxdTxVSoR8VyRkZEGJ4dxECJXcXfQqVz", // prover addr gate3.inputs.response_inputs, keypair, );

是应该加上timelock script的,不过当时偷懒了,后来在savm里面就有实现对应的timelock逻辑 https://github.com/bitlayer-org/BitVM-Research/blob/develop/src/savm.ts#L53C42-L53C74 实际上也应该在bitvm里加上这个的

我还是有很多困惑,甚至感觉以上机制没有办法保证挑战响应顺利执行。有什么方式可以联系到你们吗?想时时聊下