Skip to content

Commit

Permalink
feat: expose ordinal verification
Browse files Browse the repository at this point in the history
  • Loading branch information
reednaa committed Feb 24, 2024
1 parent 55c6f67 commit 2c451e8
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 3 deletions.
39 changes: 37 additions & 2 deletions src/BtcTxVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ contract BtcTxVerifier is IBtcTxVerifier {
uint256 blockNum,
BtcTxProof calldata inclusionProof,
uint256 txOutIx,
bytes calldata destScriptHash,
bytes calldata outputScript,
uint256 amountSats
) external view returns (bool) {
{
Expand All @@ -41,7 +41,42 @@ contract BtcTxVerifier is IBtcTxVerifier {
blockHash,
inclusionProof,
txOutIx,
destScriptHash,
outputScript,
amountSats
)
) revert InvalidProof();

return true;
}

function verifyOrdinal(
uint256 minConfirmations,
uint256 blockNum,
BtcTxProof calldata inclusionProof,
uint256 txInId,
uint32 txInPrevTxIndex,
bytes calldata outputScript,
uint256 amountSats
) external view returns (bool) {
{
uint256 currentHeight = mirror.getLatestBlockHeight();

if (currentHeight < blockNum) revert NoBlock(currentHeight, blockNum);

unchecked {
if (currentHeight + 1 - blockNum < minConfirmations) revert TooFewConfirmations(currentHeight + 1 - blockNum, minConfirmations);
}
}

bytes32 blockHash = mirror.getBlockHash(blockNum);

if(
!BtcProof.validateOrdinalTransfer(
blockHash,
inclusionProof,
txInId,
txInPrevTxIndex,
outputScript,
amountSats
)
) revert InvalidProof();
Expand Down
17 changes: 16 additions & 1 deletion src/interfaces/IBtcTxVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,25 @@ interface IBtcTxVerifier {
uint256 blockNum,
BtcTxProof calldata inclusionProof,
uint256 txOutIx,
bytes calldata destScriptHash,
bytes calldata outputScript,
uint256 amountSats
) external view returns (bool);

/** @notice Returns the underlying mirror associated with this verifier. */
function mirror() external view returns (IBtcPrism);

/**
* @notice Verifies that the a transaction cleared, sending a specific ordinal to
* a given address. Specifically, verifies a proof that the tx was
* in block N, and that block N has at least M confirmations.
*/
function verifyOrdinal(
uint256 minConfirmations,
uint256 blockNum,
BtcTxProof calldata inclusionProof,
uint256 txInId,
uint32 txInPrevTxIndex,
bytes calldata outputScript,
uint256 amountSats
) external view returns (bool);
}

0 comments on commit 2c451e8

Please sign in to comment.