R-Puzzle¶
在 R-puzzle 中,永远不会公开临时私钥 k
。而是公开 r
和来自 r
的签名,r
是 k
对应的公钥的 x 坐标,并使用现有的 checkSig
来证明知道 k
。更多信息可以在 R-Puzzle 章节中找到。
contract RPuzzle {
Ripemd160 rhash;
// extract r from DER-encoded signature
static function extractRFromSig(Sig sig) : bytes {
int rlen = unpack(sig[3 : 4]);
return sig[4 : 4 + rlen];
}
public function unlock(Sig sig, PubKey pubKey, Sig sigr) {
require(this.rhash == hash160(extractRFromSig(sigr)));
require(checkSig(sigr, pubKey));
require(checkSig(sig, pubKey));
}
}