Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions rust/contracts/artifacts/HandleEscrow.sol/HandleEscrow.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"bytecode": {
"linkReferences": {},
"object": "0x60a080604052346100c257306080525f516020611d325f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b604051611c6b90816100c7823960805181818161038601526104290152f35b6001600160401b0319166001600160401b039081175f516020611d325f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c908163056da04814610b285750806314ac004614610ae0578063192d06e31461085e5780632b229bb9146108205780632b87fea01461079b578063485cc955146105b95780634f1ef286146103da57806352d1902d14610374578063715018a61461032b5780637967c6f0146102cd57806379ba50971461027f5780638da5cb5b1461024b578063a0cf0aea14610231578063ad3cb1cc146101ee578063c1473d3f14610193578063e30c39781461015f5763f2fde38b146100d7575f80fd5b3461015b57602036600319011261015b576100f0610c6b565b6100f8611605565b5f516020611c4b5f395f51905f5280546001600160a01b0319166001600160a01b039283169081179091555f516020611b8b5f395f51905f52549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461015b575f36600319011261015b575f516020611c4b5f395f51905f52546040516001600160a01b039091168152602090f35b3461015b57604036600319011261015b576024356001600160a01b038116810361015b576004355f525f516020611bcb5f395f51905f5260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461015b575f36600319011261015b5761022d60405161020f604082610b57565b60058152640352e302e360dc1b602082015260405191829182610bfd565b0390f35b3461015b575f36600319011261015b5760206040515f8152f35b3461015b575f36600319011261015b575f516020611b8b5f395f51905f52546040516001600160a01b039091168152602090f35b3461015b575f36600319011261015b575f516020611c4b5f395f51905f5254336001600160a01b03909116036102ba576102b83361159a565b005b63118cdaa760e01b5f523360045260245ffd5b608036600319011261015b5760243567ffffffffffffffff811161015b576102fc610319913690600401610c27565b610304610c55565b9061030d6114a7565b60643592600435610d79565b5f5f516020611c0b5f395f51905f525d005b3461015b575f36600319011261015b5760405162461bcd60e51b81526020600482015260116024820152701c995b9bdd5b98d948191a5cd8589b1959607a1b6044820152606490fd5b3461015b575f36600319011261015b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036103cb5760206040515f516020611bab5f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b604036600319011261015b576103ee610c6b565b60243567ffffffffffffffff811161015b573660238201121561015b5761041f903690602481600401359101610ba9565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115610597575b506103cb57610461611605565b6040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f9181610563575b506104a35783634c9c8ce360e01b5f5260045260245ffd5b805f516020611bab5f395f51905f528592036105515750813b1561053f575f516020611bab5f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115610527575f808360206102b895519101845af46105216114dc565b91611b2c565b50503461053057005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d60201161058f575b8161057f60209383610b57565b8101031261015b5751908561048b565b3d9150610572565b5f516020611bab5f395f51905f52546001600160a01b03161415905083610454565b3461015b57604036600319011261015b576105d2610c6b565b6024356001600160a01b0381169081900361015b575f516020611c2b5f395f51905f52549160ff8360401c16159267ffffffffffffffff811680159081610793575b6001149081610789575b159081610780575b506107715767ffffffffffffffff1981166001175f516020611c2b5f395f51905f525583610745575b5081156107365761065e61167d565b61066661167d565b6001600160a01b038116156107235761067e9061159a565b61068661167d565b61068e61167d565b61069661167d565b6bffffffffffffffffffffffff60a01b5f516020611beb5f395f51905f525416175f516020611beb5f395f51905f52556106cc57005b68ff0000000000000000195f516020611c2b5f395f51905f5254165f516020611c2b5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b631e4fbdf760e01b5f525f60045260245ffd5b6325c514cb60e11b5f5260045ffd5b68ffffffffffffffffff191668010000000000000001175f516020611c2b5f395f51905f52558361064f565b63f92ee8a960e01b5f5260045ffd5b90501585610626565b303b15915061061e565b859150610614565b3461015b57606036600319011261015b5760243567ffffffffffffffff811161015b576107ec6107d26107e4923690600401610c27565b92906107dc610c55565b933691610ba9565b600435610cd7565b5f525f516020611bcb5f395f51905f5260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461015b57604036600319011261015b5760243567ffffffffffffffff811161015b576108566107e46020923690600401610bdf565b604051908152f35b3461015b57608036600319011261015b5760043560243567ffffffffffffffff811161015b57610892903690600401610c27565b9061089b610c55565b606435939092906001600160a01b03851680860361015b576108bb6114a7565b80158015610ad7575b610ac5575061091a916020916108e46108de368488610ba9565b82610cd7565b9460018060a01b035f516020611beb5f395f51905f52541691604051958694859384936391ef5b5160e01b855260048501610cc0565b03915afa908115610aba575f91610a8b575b506001600160a01b0316338103610a755750805f525f516020611bcb5f395f51905f5260205260405f2060018060a01b0383165f5260205260405f2054918215610a52575f8281525f516020611bcb5f395f51905f52602090815260408083206001600160a01b0390941680845293909152812055917f8c18dc0a2c06d397feb6dd44b409d75c443e6cfbe8cd39e19619d7809ff9b874906109fa9084610a0f576109d7818761150b565b604080516001600160a01b03909716875260208701919091523395918291820190565b0390a45f5f516020611c0b5f395f51905f525d005b60405163a9059cbb60e01b60208201526001600160a01b038716602482015260448082018390528152610a4d90610a47606482610b57565b86611625565b6109d7565b630c946d8360e01b5f9081526004929092526001600160a01b0316602452604490fd5b63b6bd8e8360e01b5f526004523360245260445ffd5b610aad915060203d602011610ab3575b610aa58183610b57565b810190610c81565b8461092c565b503d610a9b565b6040513d5f823e3d90fd5b631ecdd20960e31b5f5260045260245ffd5b503081146108c4565b3461015b57602036600319011261015b5760043567ffffffffffffffff811161015b57610b1c610b1761022d923690600401610bdf565b61131b565b60405191829182610bfd565b3461015b575f36600319011261015b575f516020611beb5f395f51905f52546001600160a01b03168152602090f35b90601f8019910116810190811067ffffffffffffffff821117610b7957604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111610b7957601f01601f191660200190565b929192610bb582610b8d565b91610bc36040519384610b57565b82948184528183011161015b578281602093845f960137010152565b9080601f8301121561015b57816020610bfa93359101610ba9565b90565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b9181601f8401121561015b5782359167ffffffffffffffff831161015b576020838186019501011161015b57565b604435906001600160a01b038216820361015b57565b600435906001600160a01b038216820361015b57565b9081602091031261015b57516001600160a01b038116810361015b5790565b908060209392818452848401375f828201840152601f01601f1916010190565b604090610bfa949281528160208201520191610ca0565b610d1a601b6020604051610cec604082610b57565b828152017f6c696269642e657363726f772e68616e646c652d736c6f742e763100000000008152209261131b565b6020815191012060405191602083019384526040830152606082015260608152610d45608082610b57565b51902090565b91908203918211610d5857565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610d5857565b939291938315610f85575f516020611beb5f395f51905f5254604051630f62983f60e41b8152600481018390526001600160a01b03909116949060a081602481895afa8015610aba575f906111f4575b610dde9150610dd9368987610ba9565b6116a8565b5060058110156111e057806111ce5750610e02610dfc368886610ba9565b83610cd7565b6001600160a01b039094169485159081156111b15782340361119a575b602060405180926391ef5b5160e01b82528180610e418d8b8b60048501610cc0565b03915afa908115610aba575f9161117b575b506001600160a01b0381169081610ffe57505015610ee7577fee495663dac7b04af757ba8ee849872169d884c3d001f57fa2352898ce71f7aa92610ed991965b855f525f516020611bcb5f395f51905f5260205260405f20875f5260205260405f20610ec0898254610d6c565b9055604051938452606060208501526060840191610ca0565b9460408201528033950390a4565b6040516370a0823160e01b815230600482015290602082602481895afa918215610aba575f92610fc8575b50610f1f9030338861154f565b6040516370a0823160e01b815230600482015290602082602481895afa8015610aba575f90610f94575b610f539250610d4b565b948515610f85577fee495663dac7b04af757ba8ee849872169d884c3d001f57fa2352898ce71f7aa92610ed991610e93565b631f2a200560e01b5f5260045ffd5b506020823d602011610fc0575b81610fae60209383610b57565b8101031261015b57610f539151610f49565b3d9150610fa1565b9091506020813d602011610ff6575b81610fe460209383610b57565b8101031261015b575190610f1f610f12565b3d9150610fd7565b83919594929893985f14611068579161103e61105a94927f276c5feea4a110ef0c00982b96bce8903321dfc84e414bdf4e898fad7ecfb5cc97969461150b565b6040519485526020850152608060408501526080840191610ca0565b9460608201528033950390a4565b949392919750604051946370a0823160e01b86528460048701526020866024818b5afa958615610aba575f96611143575b50906110a691338961154f565b6040516370a0823160e01b815260048101849052936020856024818a5afa948515610aba575f95611109575b509061110361105a93927f276c5feea4a110ef0c00982b96bce8903321dfc84e414bdf4e898fad7ecfb5cc96610d4b565b9761103e565b945091906020853d60201161113b575b8161112660209383610b57565b8101031261015b5793519390916111036110d2565b3d9150611119565b919095506020823d602011611173575b8161116060209383610b57565b8101031261015b579051946110a6611099565b3d9150611153565b611194915060203d602011610ab357610aa58183610b57565b5f610e53565b82630626ade360e41b5f526004523460245260445ffd5b3415610e1f57630626ade360e41b5f525f6004523460245260445ffd5b63eb1fffd960e01b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5060a0813d60a011611290575b8161120e60a09383610b57565b8101031261015b5760405160a0810181811067ffffffffffffffff821117610b795760405281519161ffff8316830361015b57608061128691610dde94845261125960208201611542565b602085015261126a60408201611542565b604085015261127b60608201611542565b606085015201611542565b6080820152610dc9565b3d9150611201565b9081518110156112a9570160200190565b634e487b7160e01b5f52603260045260245ffd5b5f198114610d585760010190565b8015610d58575f190190565b906112e182610b8d565b6112ee6040519182610b57565b82815280926112ff601f1991610b8d565b0190602036910137565b60ff60209116019060ff8211610d5857565b80515f5b81811080611486575b1561133b57611336906112bd565b61131f565b905b81811180611458575b1561135957611354906112cb565b61133d565b91909180831080611437575b611422575b8261137491610d4b565b90811561140e57611384826112d7565b925f5b838110611395575050505090565b806113ab6113a560019385610d6c565b85611298565b516001600160f81b0319811690604160f81b82101580611400575b6113df575b505f1a6113d88288611298565b5301611387565b6001600160f81b031991506113f69060f81c611309565b60f81b165f6113cb565b50602d60f91b8211156113c6565b63eb1fffd960e01b5f52600160045260245ffd5b9161142f611374916112bd565b92905061136a565b50600160fe1b6001600160f81b03196114508585611298565b511614611365565b505f198101818111610d5857600160fd1b906001600160f81b03199061147e9086611298565b511614611346565b50600160fd1b6001600160f81b031961149f8386611298565b511614611328565b5f516020611c0b5f395f51905f525c6114cd5760015f516020611c0b5f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b3d15611506573d906114ed82610b8d565b916114fb6040519384610b57565b82523d5f602084013e565b606090565b5f80808085855af161151b6114dc565b5015611525575050565b63296c17bb60e21b5f5260018060a01b031660045260245260445ffd5b5190811515820361015b57565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815261159891611593608483610b57565b611625565b565b5f516020611c4b5f395f51905f5280546001600160a01b03199081169091555f516020611b8b5f395f51905f5280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b5f516020611b8b5f395f51905f52546001600160a01b031633036102ba57565b905f602091828151910182855af115610aba575f513d61167457506001600160a01b0381163b155b6116545750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561164d565b60ff5f516020611c2b5f395f51905f525460401c161561169957565b631afcd79f60e31b5f5260045ffd5b915f918351925b838110806118d9575b156116cb576116c6906112bd565b6116af565b93925b848111806118ab575b156116ea576116e5906112cb565b6116ce565b9290919260208301511515806118a2575b80611881575b61186c575b8461171091610d4b565b9081156118565761ffff83511682116118405761172c826112d7565b945f5b83811061179d5750505050604081015115611771575061174e82611ac2565b15611759575b5f9190565b6040516004925061176b602082610b57565b5f815290565b6080015161177e575f9190565b611787826119f9565b611754576040516004925061176b602082610b57565b6117b06117aa8284610d6c565b84611298565b516001600160f81b0319811690604160f81b82101580611832575b611811575b506117db86826118fa565b156117f757906001915f1a6117f0828a611298565b530161172f565b5050505050509050600390602061176b6040519182610b57565b6001600160f81b031991506118289060f81c611309565b60f81b165f6117d0565b50602d60f91b8211156117cb565b505050905060029060405161176b602082610b57565b505050905060019060405161176b602082610b57565b93611879611710916112bd565b949050611706565b50600160fe1b6001600160f81b031961189a8785611298565b511614611701565b508481116116fb565b505f198101818111610d5857600160fd1b906001600160f81b0319906118d19087611298565b5116146116d7565b50600160fd1b6001600160f81b03196118f28388611298565b5116146116b8565b6001600160f81b03191690606160f81b821015806119eb575b61196c57600360fc1b821015806119dd575b61196c576040810151611980576060810151151580611973575b61196c57608001511515908161195e575b50611959575f90565b600190565b602d60f81b1490505f611950565b5050600190565b50605f60f81b821461193f565b50601760f91b81149081156119cf575b81156119c1575b81156119b3575b81156119a8575090565b600160fe1b14919050565b605f60f81b8114915061199e565b602d60f81b81149150611997565b602b60f81b81149150611990565b50603960f81b821115611925565b50603d60f91b821115611913565b8051156112a95760208101516001600160f81b031916602d60f81b148015611a92575b611a8d5760015b815181101561196c57602d60f81b6001600160f81b0319611a448385611298565b51161480611a5f575b611a5957600101611a23565b50505f90565b505f198101818111610d5857602d60f81b906001600160f81b031990611a859085611298565b511614611a4d565b505f90565b5080515f198101908111610d5857602d60f81b906001600160f81b031990611aba9084611298565b511614611a1c565b5f195f5b8251811015611b0357600160fe1b6001600160f81b0319611ae78386611298565b511614611af7575b600101611ac6565b9019611a595780611aef565b505f198114611a59578015159182611b1a57505090565b515f19810192508211610d5857141590565b90611b505750805115611b4157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580611b81575b611b61575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15611b5956fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcfcca8d7d2c66f78c2760f3fcd99e0bf938b0aeb0d0b471f481dd50b8aff6b400fcca8d7d2c66f78c2760f3fcd99e0bf938b0aeb0d0b471f481dd50b8aff6b4019b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00"
},
"methodIdentifiers": {
"NATIVE()": "a0cf0aea",
"UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
"acceptOwnership()": "79ba5097",
"canonicalHandle(string)": "14ac0046",
"claim(bytes32,string,address,address)": "192d06e3",
"deposit(bytes32,string,address,uint256)": "7967c6f0",
"escrowed(bytes32,string,address)": "2b87fea0",
"escrowedAt(bytes32,address)": "c1473d3f",
"initialize(address,address)": "485cc955",
"names()": "056da048",
"owner()": "8da5cb5b",
"pendingOwner()": "e30c3978",
"proxiableUUID()": "52d1902d",
"renounceOwnership()": "715018a6",
"slotOf(bytes32,string)": "2b229bb9",
"transferOwnership(address)": "f2fde38b",
"upgradeToAndCall(address,bytes)": "4f1ef286"
}
}

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions rust/contracts/src/artifacts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ pub const COVERED: &[(&str, &str)] = &[
("GoogleIdentityVerifier", "GoogleIdentityVerifier"),
("XIdentityVerifier", "XIdentityVerifier"),
("IdentityJwksRoots", "IdentityJwksRoots"),
// escrow — value held against a handle nobody has claimed yet
("HandleEscrow", "HandleEscrow"),
// factory
("LibidFactory", "LibidFactory"),
];
Expand Down
90 changes: 90 additions & 0 deletions rust/contracts/src/bindings/escrow.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
//! Bindings for the handle escrow (`solidity/contracts/escrow/`).
//!
//! Value held against a platform handle rather than against an account id, so
//! a sender who knows only a name can pay it before anybody has claimed it.
//! Whoever proves that handle to the naming system takes what is held.
//!
//! The escrow keys on a rules-independent form of the text, so the slot never
//! moves when a platform's normalization is reconfigured, and validates the
//! text against the platform's current rules on the way in, so nothing funds a
//! slot no proof could claim. `slotOf` is `pure` and public for exactly that
//! reason: a client computes the same key off chain.

/// Bindings for `escrow/HandleEscrow.sol`.
#[allow(clippy::too_many_arguments, unused_attributes)]
mod escrow_inner {
use alloy::sol;

sol! {
#[sol(rpc)]
interface HandleEscrow {
function initialize(address owner_, address names_) external;

/// Put `amount` of `token` against a handle. `address(0)` is the
/// chain's own token, and then `amount` must equal the value sent.
///
/// A handle that already resolves is paid STRAIGHT THROUGH to its
/// holder — the escrow is for the window before a handle is
/// claimed. Only an unclaimed handle escrows, and then there is no
/// way to take it back. Watch `Deposited` against `Forwarded` to
/// tell the two apart.
function deposit(
bytes32 platformId,
string calldata handle,
address token,
uint256 amount
) external payable;

/// Take everything held for a handle in one token. The caller has
/// to be the wallet that handle currently resolves to.
function claim(
bytes32 platformId,
string calldata handle,
address token,
address recipient
) external;

function escrowed(bytes32 platformId, string calldata handle, address token)
external
view
returns (uint256);
function escrowedAt(bytes32 slot, address token) external view returns (uint256);
function slotOf(bytes32 platformId, string memory handle) external pure returns (bytes32);
function canonicalHandle(string memory handle) external pure returns (string memory);
function names() external view returns (address);
function NATIVE() external view returns (address);

/// `handle` rides along as text: a slot cannot be turned back into
/// a string, so an indexer reads the name from here.
event Deposited(
bytes32 indexed slot,
address indexed token,
address indexed depositor,
bytes32 platformId,
string handle,
uint256 amount
);
/// A deposit for a handle somebody already held, paid to that holder
/// and never booked. Nothing is claimable afterwards, which is what
/// separates it from `Deposited`.
event Forwarded(
bytes32 indexed slot,
address indexed token,
address indexed depositor,
address holder,
bytes32 platformId,
string handle,
uint256 amount
);
event Claimed(
bytes32 indexed slot,
address indexed token,
address indexed claimer,
address recipient,
uint256 amount
);
}
}
}

pub use escrow_inner::HandleEscrow;
1 change: 1 addition & 0 deletions rust/contracts/src/bindings/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//! Hand-written `alloy::sol!` bindings, kept in lockstep with the Solidity
//! sources in `solidity/contracts`. Grouped by product area.

pub mod escrow;
pub mod factory;
pub mod identity;
pub mod login;
Expand Down
Loading
Loading