Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
5 changes: 2 additions & 3 deletions ethereum/src/GovernanceAdmin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,8 @@ contract GovernanceAdmin is IMessageHandler, IGovernance {
discriminant := shr(DISCRIMINANT_BIT_SHIFT, calldataload(payload.offset))
}

if (
!(discriminant >= GovernanceConstants.CHANGE_GOVERNANCE && discriminant <= GovernanceConstants.UPGRADE_PROXY)
) {
if (!(discriminant >= GovernanceConstants.CHANGE_GOVERNANCE
&& discriminant <= GovernanceConstants.UPGRADE_PROXY)) {
return false;
}

Expand Down
5 changes: 2 additions & 3 deletions ethereum/src/GovernancePauser.sol
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,8 @@ contract GovernancePauser is IMessageHandler, IGovernance {
discriminant := shr(DISCRIMINANT_BIT_SHIFT, calldataload(payload.offset))
}

if (
!(discriminant >= GovernanceConstants.CHANGE_GOVERNANCE && discriminant <= GovernanceConstants.UNPAUSE_PROXY)
) {
if (!(discriminant >= GovernanceConstants.CHANGE_GOVERNANCE
&& discriminant <= GovernanceConstants.UNPAUSE_PROXY)) {
return false;
}

Expand Down
15 changes: 9 additions & 6 deletions ethereum/src/erc20/WrappedVara.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ pragma solidity ^0.8.30;

import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
import {ERC20BurnableUpgradeable} from
"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
import {ERC20PausableUpgradeable} from
"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PausableUpgradeable.sol";
import {ERC20PermitUpgradeable} from
"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol";
import {
ERC20BurnableUpgradeable
} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
import {
ERC20PausableUpgradeable
} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PausableUpgradeable.sol";
import {
ERC20PermitUpgradeable
} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol";
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import {IERC20Mintable} from "src/interfaces/IERC20Mintable.sol";
Expand Down
5 changes: 1 addition & 4 deletions ethereum/src/interfaces/IVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,5 @@ interface IVerifier {
* @dev Actually, it is a wrapper around `IPlonkVerifier.verifyProof` function.
* It is used to avoid reverts in case of invalid proof.
*/
function safeVerifyProof(bytes calldata proof, uint256[] calldata publicInputs)
external
view
returns (bool success);
function safeVerifyProof(bytes calldata proof, uint256[] calldata publicInputs) external view returns (bool success);
}
11 changes: 6 additions & 5 deletions ethereum/src/libraries/BinaryMerkleTree.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,12 @@ library BinaryMerkleTree {
* @param leafHash Hash of the leaf to verify.
* @return computed Root hash of the Merkle tree.
*/
function processProofCalldata(bytes32[] calldata proof, uint256 numberOfLeaves, uint256 leafIndex, bytes32 leafHash)
internal
pure
returns (bytes32)
{
function processProofCalldata(
bytes32[] calldata proof,
uint256 numberOfLeaves,
uint256 leafIndex,
bytes32 leafHash
) internal pure returns (bytes32) {
uint256 position = leafIndex;
uint256 width = numberOfLeaves;
bytes32 computed = leafHash;
Expand Down
15 changes: 7 additions & 8 deletions ethereum/src/libraries/LibString.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,13 @@ library LibString {
assembly ("memory-safe") {
// We don't need to zero right pad the string,
// since this is our own custom non-standard packing scheme.
result :=
mul(
// Load the length and the bytes.
mload(add(a, 0x1f)),
// `length != 0 && length < 32`. Abuses underflow.
// Assumes that the length is valid and within the block gas limit.
lt(sub(mload(a), 1), 0x1f)
)
result := mul(
// Load the length and the bytes.
mload(add(a, 0x1f)),
// `length != 0 && length < 32`. Abuses underflow.
// Assumes that the length is valid and within the block gas limit.
lt(sub(mload(a), 1), 0x1f)
)
}
}

Expand Down
62 changes: 45 additions & 17 deletions ethereum/src/libraries/PlonkVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,19 @@ contract PlonkVerifier is IPlonkVerifier {
11559732032986387107991004021392285783925812861821192530917403151452391805634;
uint256 private constant G2_SRS_0_X_1 =
10857046999023057135944570762232829481370756359578518086990519993285655852781;
uint256 private constant G2_SRS_0_Y_0 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;
uint256 private constant G2_SRS_0_Y_1 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;
uint256 private constant G2_SRS_0_Y_0 =
4082367875863433681332203403145435568316851327593401208105741076214120093531;
uint256 private constant G2_SRS_0_Y_1 =
8495653923123431417604973247489272438418190587263600148770280649306958101930;

uint256 private constant G2_SRS_1_X_0 =
15805639136721018565402881920352193254830339253282065586954346329754995870280;
uint256 private constant G2_SRS_1_X_1 =
19089565590083334368588890253123139704298730990782503769911324779715431555531;
uint256 private constant G2_SRS_1_Y_0 = 9779648407879205346559610309258181044130619080926897934572699915909528404984;
uint256 private constant G2_SRS_1_Y_1 = 6779728121489434657638426458390319301070371227460768374343986326751507916979;
uint256 private constant G2_SRS_1_Y_0 =
9779648407879205346559610309258181044130619080926897934572699915909528404984;
uint256 private constant G2_SRS_1_Y_1 =
6779728121489434657638426458390319301070371227460768374343986326751507916979;

uint256 private constant G1_SRS_X = 14312776538779914388377568895031746459131577658076416373430523308756343304251;
uint256 private constant G1_SRS_Y = 11763105256161367503191792604679297387056316997144156930871823008787082098465;
Expand All @@ -51,21 +55,28 @@ contract PlonkVerifier is IPlonkVerifier {
uint256 private constant VK_QL_COM_Y = 8858993227530927120179212220225110200455783923154389098077647079543812507346;
uint256 private constant VK_QR_COM_X = 5995666133180000820789835491784338333702034602727105370265423698164484193461;
uint256 private constant VK_QR_COM_Y = 6015852916734829908690633413804334290457163063407829121372596373731349715572;
uint256 private constant VK_QM_COM_X = 16585542426788090481910888362572441247012564686689959863112139436907519862035;
uint256 private constant VK_QM_COM_Y = 14329313695986554679500867184364102111346826480414227660573424046767442892985;
uint256 private constant VK_QM_COM_X =
16585542426788090481910888362572441247012564686689959863112139436907519862035;
uint256 private constant VK_QM_COM_Y =
14329313695986554679500867184364102111346826480414227660573424046767442892985;
uint256 private constant VK_QO_COM_X = 4166512812663112397191859597547150136308925512949907629628261039244202560204;
uint256 private constant VK_QO_COM_Y = 10634459059554147778115887862529134477832584464771163398244417609055229015218;
uint256 private constant VK_QO_COM_Y =
10634459059554147778115887862529134477832584464771163398244417609055229015218;
uint256 private constant VK_QK_COM_X = 8156377053823136973071573954139507624928720444207977309485810933822618716655;
uint256 private constant VK_QK_COM_Y = 7024148089537578121052270799858306628956979785931046651870204381339875165221;

uint256 private constant VK_S1_COM_X = 14668757368193418218302507515680144302114783799310578098395191690088432599791;
uint256 private constant VK_S1_COM_X =
14668757368193418218302507515680144302114783799310578098395191690088432599791;
uint256 private constant VK_S1_COM_Y = 9152231620889024871996362374078426720059919678282095847343698067320452547802;

uint256 private constant VK_S2_COM_X = 17475728587689666768826669409814656052757270714601068564457455493114242806162;
uint256 private constant VK_S2_COM_X =
17475728587689666768826669409814656052757270714601068564457455493114242806162;
uint256 private constant VK_S2_COM_Y = 4768974847800363849904839888387984556680315874238986515091695902554921466498;

uint256 private constant VK_S3_COM_X = 10896535026703489103639571082918765017957101484574275063874839329413371332761;
uint256 private constant VK_S3_COM_Y = 13435787114561034596462515708219101064054202538760544180276642906725849032892;
uint256 private constant VK_S3_COM_X =
10896535026703489103639571082918765017957101484574275063874839329413371332761;
uint256 private constant VK_S3_COM_Y =
13435787114561034596462515708219101064054202538760544180276642906725849032892;

uint256 private constant VK_COSET_SHIFT = 5;

Expand Down Expand Up @@ -802,7 +813,10 @@ contract PlonkVerifier is IPlonkVerifier {
let zeta_omega := mulmod(mload(add(state, STATE_ZETA)), VK_OMEGA, R_MOD)
random := mulmod(random, zeta_omega, R_MOD)
point_acc_mul_calldata(
folded_points_quotients, add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_X), random, mPtr
folded_points_quotients,
add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_X),
random,
mPtr
)

point_add(folded_digests, folded_digests, folded_points_quotients, mPtr)
Expand Down Expand Up @@ -864,7 +878,9 @@ contract PlonkVerifier is IPlonkVerifier {

point_acc_mul(state_folded_digests, add(state, STATE_LINEARISED_POLYNOMIAL_X), acc_gamma, mPtr)
fr_acc_mul_calldata(
add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_LINEARISED_POLYNOMIAL_AT_ZETA), acc_gamma
add(state, STATE_FOLDED_CLAIMED_VALUES),
add(aproof, PROOF_LINEARISED_POLYNOMIAL_AT_ZETA),
acc_gamma
)

acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD)
Expand Down Expand Up @@ -989,7 +1005,11 @@ contract PlonkVerifier is IPlonkVerifier {
)

let rl :=
mulmod(calldataload(add(aproof, PROOF_L_AT_ZETA)), calldataload(add(aproof, PROOF_R_AT_ZETA)), R_MOD)
mulmod(
calldataload(add(aproof, PROOF_L_AT_ZETA)),
calldataload(add(aproof, PROOF_R_AT_ZETA)),
R_MOD
)
mstore(mPtr, VK_QM_COM_X)
mstore(add(mPtr, 0x20), VK_QM_COM_Y)
point_acc_mul(add(state, STATE_LINEARISED_POLYNOMIAL_X), mPtr, rl, add(mPtr, 0x40))
Expand Down Expand Up @@ -1100,11 +1120,17 @@ contract PlonkVerifier is IPlonkVerifier {
let zeta_power_n_plus_two := pow(mload(add(state, STATE_ZETA)), n_plus_two, mPtr)
point_mul_calldata(add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_2_X), zeta_power_n_plus_two, mPtr)
point_add_calldata(
add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_1_X), mPtr
add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X),
add(aproof, PROOF_H_1_X),
mPtr
)
point_mul(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), zeta_power_n_plus_two, mPtr)
point_add_calldata(
add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_0_X), mPtr
add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X),
add(aproof, PROOF_H_0_X),
mPtr
)
}

Expand Down Expand Up @@ -1155,7 +1181,9 @@ contract PlonkVerifier is IPlonkVerifier {
mstore(
computed_quotient,
addmod(
mload(computed_quotient), sub(R_MOD, mload(add(state, STATE_ALPHA_SQUARE_LAGRANGE_0))), R_MOD
mload(computed_quotient),
sub(R_MOD, mload(add(state, STATE_ALPHA_SQUARE_LAGRANGE_0))),
R_MOD
)
)
mstore(
Expand Down
16 changes: 10 additions & 6 deletions ethereum/test/Base.sol
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,15 @@ abstract contract Base is CommonBase, StdAssertions, StdChains, StdCheats, StdIn
deployerAddress: deployerAddress,
forkUrlOrAlias: "",
overrides: Overrides({
circleToken: vm.envExists("CIRCLE_TOKEN") ? vm.envAddress("CIRCLE_TOKEN") : BaseConstants.ZERO_ADDRESS,
tetherToken: vm.envExists("TETHER_TOKEN") ? vm.envAddress("TETHER_TOKEN") : BaseConstants.ZERO_ADDRESS,
wrappedEther: vm.envExists("WRAPPED_ETHER") ? vm.envAddress("WRAPPED_ETHER") : BaseConstants.ZERO_ADDRESS
circleToken: vm.envExists("CIRCLE_TOKEN")
? vm.envAddress("CIRCLE_TOKEN")
: BaseConstants.ZERO_ADDRESS,
tetherToken: vm.envExists("TETHER_TOKEN")
? vm.envAddress("TETHER_TOKEN")
: BaseConstants.ZERO_ADDRESS,
wrappedEther: vm.envExists("WRAPPED_ETHER")
? vm.envAddress("WRAPPED_ETHER")
: BaseConstants.ZERO_ADDRESS
}),
vftManager: vm.envBytes32("VFT_MANAGER"),
governanceAdmin: vm.envBytes32("GOVERNANCE_ADMIN"),
Expand Down Expand Up @@ -180,9 +186,7 @@ abstract contract Base is CommonBase, StdAssertions, StdChains, StdCheats, StdIn
deployerAddress: _deploymentArguments.deployerAddress,
forkUrlOrAlias: _deploymentArguments.forkUrlOrAlias,
overrides: Overrides({
circleToken: erc20Tokens[0],
tetherToken: erc20Tokens[1],
wrappedEther: erc20Tokens[2]
circleToken: erc20Tokens[0], tetherToken: erc20Tokens[1], wrappedEther: erc20Tokens[2]
}),
vftManager: erc20Manager.vftManagers()[0],
governanceAdmin: governanceAdmin.governance(),
Expand Down
6 changes: 3 additions & 3 deletions ethereum/test/BridgingPayment.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ contract BridgingPaymentTest is Test, Base {
address bridgingPayment_ = bridgingPaymentOwner.createBridgingPayment(deploymentArguments.bridgingPaymentFee);

vm.expectRevert(IBridgingPayment.PayFeeFailed.selector);
erc20Manager.requestBridgingPayingFee{value: deploymentArguments.bridgingPaymentFee}(
token, amount, to, bridgingPayment_
);
erc20Manager.requestBridgingPayingFee{
value: deploymentArguments.bridgingPaymentFee
}(token, amount, to, bridgingPayment_);

vm.stopPrank();
}
Expand Down
Loading
Loading