Skip to content

Commit

Permalink
chore: remove sql db in mocked gateway
Browse files Browse the repository at this point in the history
chore: remove useless README

docs: fixed link

chore: natspec

chore: natspecs

chore: prettier
  • Loading branch information
jatZama committed Dec 26, 2024
1 parent a33eeba commit e2d876f
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 138 deletions.
24 changes: 17 additions & 7 deletions contracts/decryptionOracle/DecryptionOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ contract DecryptionOracle is UUPSUpgradeable, Ownable2StepUpgradeable {
/// @notice Name of the contract
string private constant CONTRACT_NAME = "DecryptionOracle";

/// @notice Version of the contract
/// @notice Major version of the contract.
uint256 private constant MAJOR_VERSION = 0;

/// @notice Minor version of the contract.
uint256 private constant MINOR_VERSION = 1;

/// @notice Patch version of the contract.
uint256 private constant PATCH_VERSION = 0;

event DecryptionRequest(uint256 indexed requestID, uint256[] cts, address contractCaller, bytes4 callbackSelector);
Expand All @@ -33,6 +37,9 @@ contract DecryptionOracle is UUPSUpgradeable, Ownable2StepUpgradeable {
bytes32 private constant DecryptionOracleStorageLocation =
0xd86fa2a52e99634194c279afa011b5f5166614c3198dd09bbd002d5fb5c0bc00;

/**
* @dev Returns the DecryptionOracle storage location.
*/
function _getDecryptionOracleStorage() internal pure returns (DecryptionOracleStorage storage $) {
assembly {
$.slot := DecryptionOracleStorageLocation
Expand All @@ -48,10 +55,11 @@ contract DecryptionOracle is UUPSUpgradeable, Ownable2StepUpgradeable {
__Ownable_init(_decryptionOracleOwner);
}

/// @notice Requests the decryption of n ciphertexts `ctsHandles` with the result returned in a callback.
/// @notice During callback, msg.sender is called with [callbackSelector,requestID,decrypt(ctsHandles[0]),decrypt(ctsHandles[1]),...,decrypt(ctsHandles[n-1]),signatures]
/// @param ctsHandles is an array of uint256s handles.
/// @param callbackSelector the callback selector to be called on msg.sender later during fulfilment
/** @notice Requests the decryption of n ciphertexts `ctsHandles` with the result returned in a callback.
* @notice During callback, msg.sender is called with [callbackSelector,requestID,decrypt(ctsHandles[0]),decrypt(ctsHandles[1]),...,decrypt(ctsHandles[n-1]),signatures]
* @param ctsHandles is an array of uint256s handles.
* @param callbackSelector the callback selector to be called on msg.sender later during fulfilment
*/
function requestDecryption(
uint256[] calldata ctsHandles,
bytes4 callbackSelector
Expand All @@ -62,8 +70,10 @@ contract DecryptionOracle is UUPSUpgradeable, Ownable2StepUpgradeable {
$.counter++;
}

/// @notice Getter for the name and version of the contract
/// @return string representing the name and the version of the contract
/**
* @notice Getter for the name and version of the contract.
* @return string Name and the version of the contract.
*/
function getVersion() external pure virtual returns (string memory) {
return
string(
Expand Down
84 changes: 0 additions & 84 deletions contracts/examples/README.md

This file was deleted.

1 change: 1 addition & 0 deletions contracts/examples/TestAsyncDecrypt.sol
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ contract TestAsyncDecrypt is DecryptionOracleCaller {
bytes[] memory signatures
) public checkSignatures(requestID, signatures) returns (bool) {
yBool = decryptedInput;
revert();
return yBool;
}

Expand Down
45 changes: 0 additions & 45 deletions contracts/test/asyncDecrypt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,10 @@ import dotenv from 'dotenv';
import { Wallet } from 'ethers';
import fs from 'fs';
import { ethers, network } from 'hardhat';
import { Database } from 'sqlite3';

import { DecryptionOracle } from '../types';
import { awaitCoprocessor, getClearText } from './coprocessorUtils';

//const oracleDB = new Database('./oracle.db'); // on-disk db for debugging
const oracleDB = new Database(':memory:');

oracleDB.serialize(() =>
oracleDB.run(
'CREATE TABLE decryptionRequests (requestID TEXT PRIMARY KEY,cts TEXT[] NOT NULL,contractCaller BINARY(20) NOT NULL, callbackSelector BINARY(4) NOT NULL, isFulfilled BOOLEAN NOT NULL DEFAULT FALSE);',
),
);

export function insertSQL(
requestID: BigInt,
cts: BigInt[],
contractCaller: string,
callbackSelector: string,
isFulfilled: boolean,
) {
try {
const requestIDString = requestID.toString();
const ctsStrings = cts.map((num) => num.toString());
oracleDB.run(
'INSERT OR REPLACE INTO decryptionRequests (requestID, cts, contractCaller, callbackSelector, isFulfilled) VALUES (?, ?, ?, ?, ?)',
[requestIDString, JSON.stringify(ctsStrings), contractCaller, callbackSelector, isFulfilled],
);
} catch (error) {
if (error.code === 'SQLITE_CONSTRAINT') {
console.log(`Record with requestID ${requestID} already exists in database`);
}
throw error;
}
}

export function markAsFulfilled(requestID: BigInt): boolean {
try {
const requestIDString = requestID.toString();
oracleDB.run('UPDATE decryptionRequests SET isFulfilled = TRUE WHERE requestID = ?', [requestIDString]);
return true;
} catch (error) {
console.warn(`Failed to mark request ${requestID} as fulfilled. Error: ${error.message}`);
return false;
}
}

const networkName = network.name;

const parsedEnvACL = dotenv.parse(fs.readFileSync('addresses/.env.acl'));
Expand Down Expand Up @@ -137,7 +94,6 @@ const fulfillAllPastRequestsIds = async (mocked: boolean) => {
const handles = event.args[1];
const contractCaller = event.args[2];
const callbackSelector = event.args[3];
insertSQL(requestID, handles, contractCaller, callbackSelector, false);
const typesList = handles.map((handle) => parseInt(handle.toString(16).slice(-4, -2), 16));
// if request is not already fulfilled
if (mocked) {
Expand Down Expand Up @@ -189,7 +145,6 @@ const fulfillAllPastRequestsIds = async (mocked: boolean) => {
};
const tx = await relayer.sendTransaction(txData);
await tx.wait();
markAsFulfilled(requestID);
}
}
};
Expand Down
4 changes: 2 additions & 2 deletions docs/fundamentals/fhevm/contracts.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ This contract is needed for security, especially for coprocessor where we could

This contract tracks the FHEGas consumed in each block, and reverts the transactions inside a block if the FHEGas block limit is exceeded.

## Gateway Contract
## DecryptionOracle Contract

The [GatewayContract](../../../contracts/gateway/GatewayContract.sol) is an onchain contract designed to interact with an offchain Gateway component that handles decryption requests. When a dApp calls the `requestDecryption` function, the Gateway contract emits an event that is caught by the Gateway service.
The [DecryptionOracle](../../../contracts/decryptionOracle/DecryptionOracle.sol) is an onchain contract designed to interact with an offchain Gateway component that handles decryption requests. When a dApp calls the `requestDecryption` function, the `DecryptionOracle` contract emits an event that is caught by the Gateway service.

_Note_: It is possible to have multiple Gateways, so multiple Gateway contracts can also be deployed. This is the only contract from this documentation page that is not strictly part of "core fhEVM" contracts, and as such, it should not be considered as a "trusted" contract. We only trust the KMS and the core fhEVM contracts. The Gateway is only bridging trust from host chain to KMS chain via storage proofs, and from KMS chain to the host chain via the signatures from KMS signers.

0 comments on commit e2d876f

Please sign in to comment.