Skip to main content
The Escrow contract stores oraclePk and the hash of the one message that the signer must sign. The address of the escrow commits to both values. Interactivity and discovery. To release the funds, the signer must sign that message when the escrow settles. The contract names a key, not a place: it does not say where the signer publishes the signature or who asks for it. Each spender must find the signer and ask for the signature. Key rotation. The address commits to the key, so nobody can replace a retired or compromised key in an open escrow. The only other ways out are cancel after timeoutAt, and, if the operator is unavailable, unilateral with both parties’ signatures. Both end the escrow. A price feed makes this worse. The options example in the compiler stores five signer keys. Each settlement verifies nine signatures. Each open contract depends on that committee, and the committee must be online.

The fix: one output

Reverse the dependency. The signer publishes each price one time, into one output. A contract does not ask the signer for anything: it names an identifier, spends the output in its own transaction, and reads the price from the state of the output. One publication serves all contracts that read it. The signer can change the keys behind the output. No contract changes. Asset as Contract ID shows how a contract names the output.