@coti-io/coti-contracts 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +112 -0
- package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +126 -0
- package/contracts/utils/mpc/MpcCore.sol +40 -0
- package/contracts/utils/mpc/MpcInterface.sol +2 -0
- package/package.json +1 -1
- package/test/onboard/AccountOnboard.test.ts +2 -2
- package/test/utils/accounts.ts +2 -2
- package/test/utils/mpc/Precompile.test.ts +8 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +0 -2
- package/typechain-types/contracts/GasTest.ts +91 -0
- package/typechain-types/contracts/mocks/utils/mpc/index.ts +1 -0
- package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +38 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +0 -1
- package/typechain-types/factories/contracts/GasTest__factory.ts +75 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +1 -0
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
- package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
- package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +58 -0
- package/typechain-types/hardhat.d.ts +18 -54
- package/typechain-types/index.ts +4 -6
- package/contracts/onboard/README.md +0 -65
|
@@ -123,6 +123,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
|
|
|
123
123
|
return MpcCore.xor(a, b);
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
+
function shl(
|
|
127
|
+
gtUint8 a,
|
|
128
|
+
uint8 b,
|
|
129
|
+
uint256 uintParameter,
|
|
130
|
+
address addressParameter,
|
|
131
|
+
string calldata stringParameter
|
|
132
|
+
)
|
|
133
|
+
internal
|
|
134
|
+
onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
|
|
135
|
+
returns (gtUint8)
|
|
136
|
+
{
|
|
137
|
+
return MpcCore.shl(a, b);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function shr(
|
|
141
|
+
gtUint8 a,
|
|
142
|
+
uint8 b,
|
|
143
|
+
uint256 uintParameter,
|
|
144
|
+
address addressParameter,
|
|
145
|
+
string calldata stringParameter
|
|
146
|
+
)
|
|
147
|
+
internal
|
|
148
|
+
onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
|
|
149
|
+
returns (gtUint8)
|
|
150
|
+
{
|
|
151
|
+
return MpcCore.shr(a, b);
|
|
152
|
+
}
|
|
153
|
+
|
|
126
154
|
function eq(
|
|
127
155
|
gtUint8 a,
|
|
128
156
|
gtUint8 b,
|
|
@@ -377,6 +405,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
|
|
|
377
405
|
return MpcCore.xor(a, b);
|
|
378
406
|
}
|
|
379
407
|
|
|
408
|
+
function shl(
|
|
409
|
+
gtUint16 a,
|
|
410
|
+
uint16 b,
|
|
411
|
+
uint256 uintParameter,
|
|
412
|
+
address addressParameter,
|
|
413
|
+
string calldata stringParameter
|
|
414
|
+
)
|
|
415
|
+
internal
|
|
416
|
+
onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
|
|
417
|
+
returns (gtUint16)
|
|
418
|
+
{
|
|
419
|
+
return MpcCore.shl(a, b);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
function shr(
|
|
423
|
+
gtUint16 a,
|
|
424
|
+
uint16 b,
|
|
425
|
+
uint256 uintParameter,
|
|
426
|
+
address addressParameter,
|
|
427
|
+
string calldata stringParameter
|
|
428
|
+
)
|
|
429
|
+
internal
|
|
430
|
+
onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
|
|
431
|
+
returns (gtUint16)
|
|
432
|
+
{
|
|
433
|
+
return MpcCore.shr(a, b);
|
|
434
|
+
}
|
|
435
|
+
|
|
380
436
|
function eq(
|
|
381
437
|
gtUint16 a,
|
|
382
438
|
gtUint16 b,
|
|
@@ -631,6 +687,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
|
|
|
631
687
|
return MpcCore.xor(a, b);
|
|
632
688
|
}
|
|
633
689
|
|
|
690
|
+
function shl(
|
|
691
|
+
gtUint32 a,
|
|
692
|
+
uint32 b,
|
|
693
|
+
uint256 uintParameter,
|
|
694
|
+
address addressParameter,
|
|
695
|
+
string calldata stringParameter
|
|
696
|
+
)
|
|
697
|
+
internal
|
|
698
|
+
onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
|
|
699
|
+
returns (gtUint32)
|
|
700
|
+
{
|
|
701
|
+
return MpcCore.shl(a, b);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
function shr(
|
|
705
|
+
gtUint32 a,
|
|
706
|
+
uint32 b,
|
|
707
|
+
uint256 uintParameter,
|
|
708
|
+
address addressParameter,
|
|
709
|
+
string calldata stringParameter
|
|
710
|
+
)
|
|
711
|
+
internal
|
|
712
|
+
onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
|
|
713
|
+
returns (gtUint32)
|
|
714
|
+
{
|
|
715
|
+
return MpcCore.shr(a, b);
|
|
716
|
+
}
|
|
717
|
+
|
|
634
718
|
function eq(
|
|
635
719
|
gtUint32 a,
|
|
636
720
|
gtUint32 b,
|
|
@@ -885,6 +969,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
|
|
|
885
969
|
return MpcCore.xor(a, b);
|
|
886
970
|
}
|
|
887
971
|
|
|
972
|
+
function shl(
|
|
973
|
+
gtUint64 a,
|
|
974
|
+
uint64 b,
|
|
975
|
+
uint256 uintParameter,
|
|
976
|
+
address addressParameter,
|
|
977
|
+
string calldata stringParameter
|
|
978
|
+
)
|
|
979
|
+
internal
|
|
980
|
+
onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
|
|
981
|
+
returns (gtUint64)
|
|
982
|
+
{
|
|
983
|
+
return MpcCore.shl(a, b);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
function shr(
|
|
987
|
+
gtUint64 a,
|
|
988
|
+
uint64 b,
|
|
989
|
+
uint256 uintParameter,
|
|
990
|
+
address addressParameter,
|
|
991
|
+
string calldata stringParameter
|
|
992
|
+
)
|
|
993
|
+
internal
|
|
994
|
+
onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
|
|
995
|
+
returns (gtUint64)
|
|
996
|
+
{
|
|
997
|
+
return MpcCore.shr(a, b);
|
|
998
|
+
}
|
|
999
|
+
|
|
888
1000
|
function eq(
|
|
889
1001
|
gtUint64 a,
|
|
890
1002
|
gtUint64 b,
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "../../../utils/mpc/MpcCore.sol";
|
|
5
|
+
|
|
6
|
+
contract ShiftTestsContract {
|
|
7
|
+
|
|
8
|
+
struct AllGTCastingValues {
|
|
9
|
+
gtUint8 a8_s;
|
|
10
|
+
gtUint8 b8_s;
|
|
11
|
+
gtUint16 a16_s;
|
|
12
|
+
gtUint16 b16_s;
|
|
13
|
+
gtUint32 a32_s;
|
|
14
|
+
gtUint32 b32_s;
|
|
15
|
+
gtUint64 a64_s;
|
|
16
|
+
gtUint64 b64_s;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
struct Check16 {
|
|
20
|
+
gtUint16 res16_16;
|
|
21
|
+
gtUint16 res8_16;
|
|
22
|
+
gtUint16 res16_8;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
struct Check32 {
|
|
26
|
+
gtUint32 res32_32;
|
|
27
|
+
gtUint32 res8_32;
|
|
28
|
+
gtUint32 res32_8;
|
|
29
|
+
gtUint32 res16_32;
|
|
30
|
+
gtUint32 res32_16;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
struct Check64 {
|
|
34
|
+
gtUint64 res64_64;
|
|
35
|
+
gtUint64 res8_64;
|
|
36
|
+
gtUint64 res64_8;
|
|
37
|
+
gtUint64 res16_64;
|
|
38
|
+
gtUint64 res64_16;
|
|
39
|
+
gtUint64 res32_64;
|
|
40
|
+
gtUint64 res64_32;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
uint8 result;
|
|
44
|
+
uint8 result8;
|
|
45
|
+
uint16 result16;
|
|
46
|
+
uint32 result32;
|
|
47
|
+
uint64 result64;
|
|
48
|
+
|
|
49
|
+
function getResult() public view returns (uint8) {
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function getAllShiftResults() public view returns (uint8, uint16, uint32, uint64) {
|
|
54
|
+
return (result8, result16, result32, result64);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function setPublicValues(AllGTCastingValues memory castingValues, uint8 a, uint8 b) public{
|
|
58
|
+
castingValues.a8_s = MpcCore.setPublic8(a);
|
|
59
|
+
castingValues.b8_s = MpcCore.setPublic8(b);
|
|
60
|
+
castingValues.a16_s = MpcCore.setPublic16(a);
|
|
61
|
+
castingValues.b16_s = MpcCore.setPublic16(b);
|
|
62
|
+
castingValues.a32_s = MpcCore.setPublic32(a);
|
|
63
|
+
castingValues.b32_s = MpcCore.setPublic32(b);
|
|
64
|
+
castingValues.a64_s = MpcCore.setPublic64(a);
|
|
65
|
+
castingValues.b64_s = MpcCore.setPublic64(b);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function decryptAndCompareResults16(Check16 memory check16) public returns (uint16){
|
|
69
|
+
|
|
70
|
+
// Calculate the result
|
|
71
|
+
uint16 result = MpcCore.decrypt(check16.res16_16);
|
|
72
|
+
|
|
73
|
+
require(result == MpcCore.decrypt(check16.res8_16) && result == MpcCore.decrypt(check16.res16_8),
|
|
74
|
+
"decryptAndCompareAllResults: Failed to decrypt and compare all results");
|
|
75
|
+
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function decryptAndCompareResults32(Check32 memory check32) public returns (uint32){
|
|
80
|
+
|
|
81
|
+
// Calculate the result
|
|
82
|
+
uint32 result = MpcCore.decrypt(check32.res32_32);
|
|
83
|
+
|
|
84
|
+
require(result == MpcCore.decrypt(check32.res8_32) && result == MpcCore.decrypt(check32.res32_8)
|
|
85
|
+
&& result == MpcCore.decrypt(check32.res32_16) && result == MpcCore.decrypt(check32.res16_32),
|
|
86
|
+
"decryptAndCompareAllResults: Failed to decrypt and compare all results");
|
|
87
|
+
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function decryptAndCompareResults64(Check64 memory check64) public returns (uint64){
|
|
92
|
+
|
|
93
|
+
// Calculate the result
|
|
94
|
+
uint64 result = MpcCore.decrypt(check64.res64_64);
|
|
95
|
+
|
|
96
|
+
require(result == MpcCore.decrypt(check64.res8_64) && result == MpcCore.decrypt(check64.res64_8)
|
|
97
|
+
&& result == MpcCore.decrypt(check64.res64_16) && result == MpcCore.decrypt(check64.res16_64)
|
|
98
|
+
&& result == MpcCore.decrypt(check64.res64_32) && result == MpcCore.decrypt(check64.res32_64),
|
|
99
|
+
"decryptAndCompareAllResults: Failed to decrypt and compare all results");
|
|
100
|
+
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function shlTest(uint8 a, uint8 b) public returns (uint8, uint16, uint32, uint64) {
|
|
105
|
+
AllGTCastingValues memory castingValues;
|
|
106
|
+
setPublicValues(castingValues, a, b);
|
|
107
|
+
|
|
108
|
+
result8 = MpcCore.decrypt(MpcCore.shl(castingValues.a8_s, b));
|
|
109
|
+
result16 = MpcCore.decrypt(MpcCore.shl(castingValues.a16_s, b));
|
|
110
|
+
result32 = MpcCore.decrypt(MpcCore.shl(castingValues.a32_s, b));
|
|
111
|
+
result64 = MpcCore.decrypt(MpcCore.shl(castingValues.a64_s, b));
|
|
112
|
+
return (result8, result16, result32, result64);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function shrTest(uint8 a, uint8 b) public returns (uint8) {
|
|
116
|
+
AllGTCastingValues memory castingValues;
|
|
117
|
+
setPublicValues(castingValues, a, b);
|
|
118
|
+
|
|
119
|
+
result = MpcCore.decrypt(MpcCore.shr(castingValues.a8_s, b));
|
|
120
|
+
require(result == MpcCore.decrypt(MpcCore.shr(castingValues.a16_s, b)) && result == MpcCore.decrypt(MpcCore.shr(castingValues.a32_s, b))
|
|
121
|
+
&& result == MpcCore.decrypt(MpcCore.shr(castingValues.a64_s, b)),
|
|
122
|
+
"shrTest failed");
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
}
|
|
@@ -1553,6 +1553,16 @@ library MpcCore {
|
|
|
1553
1553
|
Xor(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
|
|
1554
1554
|
}
|
|
1555
1555
|
|
|
1556
|
+
function shl(gtUint8 a, uint8 b) internal returns (gtUint8) {
|
|
1557
|
+
return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1558
|
+
Shl(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
function shr(gtUint8 a, uint8 b) internal returns (gtUint8) {
|
|
1562
|
+
return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1563
|
+
Shr(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1556
1566
|
function eq(gtUint8 a, uint8 b) internal returns (gtBool) {
|
|
1557
1567
|
return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1558
1568
|
Eq(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
|
|
@@ -1661,6 +1671,16 @@ library MpcCore {
|
|
|
1661
1671
|
Xor(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
|
|
1662
1672
|
}
|
|
1663
1673
|
|
|
1674
|
+
function shl(gtUint16 a, uint16 b) internal returns (gtUint16) {
|
|
1675
|
+
return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1676
|
+
Shl(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
function shr(gtUint16 a, uint16 b) internal returns (gtUint16) {
|
|
1680
|
+
return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1681
|
+
Shr(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1664
1684
|
function eq(gtUint16 a, uint16 b) internal returns (gtBool) {
|
|
1665
1685
|
return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1666
1686
|
Eq(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
|
|
@@ -1769,6 +1789,16 @@ library MpcCore {
|
|
|
1769
1789
|
Xor(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
|
|
1770
1790
|
}
|
|
1771
1791
|
|
|
1792
|
+
function shl(gtUint32 a, uint32 b) internal returns (gtUint32) {
|
|
1793
|
+
return gtUint32.wrap(ExtendedOperations(MPC_PRECOMPILE).
|
|
1794
|
+
Shl(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
|
|
1795
|
+
}
|
|
1796
|
+
|
|
1797
|
+
function shr(gtUint32 a, uint32 b) internal returns (gtUint32) {
|
|
1798
|
+
return gtUint32.wrap(ExtendedOperations(MPC_PRECOMPILE).
|
|
1799
|
+
Shr(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
|
|
1800
|
+
}
|
|
1801
|
+
|
|
1772
1802
|
function eq(gtUint32 a, uint32 b) internal returns (gtBool) {
|
|
1773
1803
|
return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1774
1804
|
Eq(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
|
|
@@ -1878,6 +1908,16 @@ library MpcCore {
|
|
|
1878
1908
|
Xor(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
|
|
1879
1909
|
}
|
|
1880
1910
|
|
|
1911
|
+
function shl(gtUint64 a, uint64 b) internal returns (gtUint64) {
|
|
1912
|
+
return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1913
|
+
Shl(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
function shr(gtUint64 a, uint64 b) internal returns (gtUint64) {
|
|
1917
|
+
return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1918
|
+
Shr(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1881
1921
|
function eq(gtUint64 a, uint64 b) internal returns (gtBool) {
|
|
1882
1922
|
return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
|
|
1883
1923
|
Eq(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
|
|
@@ -22,6 +22,8 @@ interface ExtendedOperations {
|
|
|
22
22
|
function And(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
23
23
|
function Or(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
24
24
|
function Xor(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
25
|
+
function Shl(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
26
|
+
function Shr(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
25
27
|
function Eq(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
26
28
|
function Ne(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
|
27
29
|
function Ge(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
|
package/package.json
CHANGED
|
@@ -24,9 +24,9 @@ describe("Account Onboard", function () {
|
|
|
24
24
|
})
|
|
25
25
|
|
|
26
26
|
it('Should successfully onboard the account', async function () {
|
|
27
|
-
const { owner } = deployment
|
|
27
|
+
const { owner, contractAddress } = deployment
|
|
28
28
|
|
|
29
|
-
await owner.generateOrRecoverAes()
|
|
29
|
+
await owner.generateOrRecoverAes(contractAddress)
|
|
30
30
|
|
|
31
31
|
expect(owner.getUserOnboardInfo()?.aesKey).to.not.equal('')
|
|
32
32
|
})
|
package/test/utils/accounts.ts
CHANGED
|
@@ -14,7 +14,7 @@ export async function setupAccounts() {
|
|
|
14
14
|
setEnvValue("PUBLIC_KEYS", `${key1.address},${key2.address}`)
|
|
15
15
|
setEnvValue("SIGNING_KEYS", `${key1.privateKey},${key2.privateKey}`)
|
|
16
16
|
|
|
17
|
-
throw new Error(`Created new random accounts ${key1.address} and ${key2.address}. Please use faucet to fund
|
|
17
|
+
throw new Error(`Created new random accounts ${key1.address} and ${key2.address}. Please use faucet to fund them.`)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const wallets = pks.map((pk) => new Wallet(pk, provider))
|
|
@@ -39,7 +39,7 @@ export async function setupAccounts() {
|
|
|
39
39
|
|
|
40
40
|
let accounts: Wallet[] = []
|
|
41
41
|
if (userKeys.length !== wallets.length) {
|
|
42
|
-
await (await wallets[0].sendTransaction({ to: wallets[1].address, value: parseEther("0
|
|
42
|
+
await (await wallets[0].sendTransaction({ to: wallets[1].address, value: parseEther("1.0") })).wait()
|
|
43
43
|
|
|
44
44
|
accounts = await Promise.all(wallets.map(async (account, i) => await toAccount(account)))
|
|
45
45
|
setEnvValue("USER_KEYS", accounts.map((a) => a.getUserOnboardInfo()?.aesKey).join(","))
|
|
@@ -113,4 +113,12 @@ describe("Precompile", function () {
|
|
|
113
113
|
bit ? bool_b : bool_a,
|
|
114
114
|
bool_a
|
|
115
115
|
)
|
|
116
|
+
buildTest(
|
|
117
|
+
"ShiftTestsContract",
|
|
118
|
+
"shlTest",
|
|
119
|
+
"getAllShiftResults",
|
|
120
|
+
[a, shift],
|
|
121
|
+
...[2, 4, 8, 16].map((x) => BigInt(a << shift) & BigInt(`0x${"f".repeat(x)}`))
|
|
122
|
+
)
|
|
123
|
+
buildTest("ShiftTestsContract", "shrTest", "getResult", params, a >> b)
|
|
116
124
|
})
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/* Autogenerated file. Do not edit manually. */
|
|
2
|
+
/* tslint:disable */
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
import type {
|
|
5
|
+
BaseContract,
|
|
6
|
+
BytesLike,
|
|
7
|
+
FunctionFragment,
|
|
8
|
+
Result,
|
|
9
|
+
Interface,
|
|
10
|
+
ContractRunner,
|
|
11
|
+
ContractMethod,
|
|
12
|
+
Listener,
|
|
13
|
+
} from "ethers";
|
|
14
|
+
import type {
|
|
15
|
+
TypedContractEvent,
|
|
16
|
+
TypedDeferredTopicFilter,
|
|
17
|
+
TypedEventLog,
|
|
18
|
+
TypedListener,
|
|
19
|
+
TypedContractMethod,
|
|
20
|
+
} from "../common";
|
|
21
|
+
|
|
22
|
+
export interface GasTestInterface extends Interface {
|
|
23
|
+
getFunction(nameOrSignature: "test1" | "test2"): FunctionFragment;
|
|
24
|
+
|
|
25
|
+
encodeFunctionData(functionFragment: "test1", values?: undefined): string;
|
|
26
|
+
encodeFunctionData(functionFragment: "test2", values?: undefined): string;
|
|
27
|
+
|
|
28
|
+
decodeFunctionResult(functionFragment: "test1", data: BytesLike): Result;
|
|
29
|
+
decodeFunctionResult(functionFragment: "test2", data: BytesLike): Result;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface GasTest extends BaseContract {
|
|
33
|
+
connect(runner?: ContractRunner | null): GasTest;
|
|
34
|
+
waitForDeployment(): Promise<this>;
|
|
35
|
+
|
|
36
|
+
interface: GasTestInterface;
|
|
37
|
+
|
|
38
|
+
queryFilter<TCEvent extends TypedContractEvent>(
|
|
39
|
+
event: TCEvent,
|
|
40
|
+
fromBlockOrBlockhash?: string | number | undefined,
|
|
41
|
+
toBlock?: string | number | undefined
|
|
42
|
+
): Promise<Array<TypedEventLog<TCEvent>>>;
|
|
43
|
+
queryFilter<TCEvent extends TypedContractEvent>(
|
|
44
|
+
filter: TypedDeferredTopicFilter<TCEvent>,
|
|
45
|
+
fromBlockOrBlockhash?: string | number | undefined,
|
|
46
|
+
toBlock?: string | number | undefined
|
|
47
|
+
): Promise<Array<TypedEventLog<TCEvent>>>;
|
|
48
|
+
|
|
49
|
+
on<TCEvent extends TypedContractEvent>(
|
|
50
|
+
event: TCEvent,
|
|
51
|
+
listener: TypedListener<TCEvent>
|
|
52
|
+
): Promise<this>;
|
|
53
|
+
on<TCEvent extends TypedContractEvent>(
|
|
54
|
+
filter: TypedDeferredTopicFilter<TCEvent>,
|
|
55
|
+
listener: TypedListener<TCEvent>
|
|
56
|
+
): Promise<this>;
|
|
57
|
+
|
|
58
|
+
once<TCEvent extends TypedContractEvent>(
|
|
59
|
+
event: TCEvent,
|
|
60
|
+
listener: TypedListener<TCEvent>
|
|
61
|
+
): Promise<this>;
|
|
62
|
+
once<TCEvent extends TypedContractEvent>(
|
|
63
|
+
filter: TypedDeferredTopicFilter<TCEvent>,
|
|
64
|
+
listener: TypedListener<TCEvent>
|
|
65
|
+
): Promise<this>;
|
|
66
|
+
|
|
67
|
+
listeners<TCEvent extends TypedContractEvent>(
|
|
68
|
+
event: TCEvent
|
|
69
|
+
): Promise<Array<TypedListener<TCEvent>>>;
|
|
70
|
+
listeners(eventName?: string): Promise<Array<Listener>>;
|
|
71
|
+
removeAllListeners<TCEvent extends TypedContractEvent>(
|
|
72
|
+
event?: TCEvent
|
|
73
|
+
): Promise<this>;
|
|
74
|
+
|
|
75
|
+
test1: TypedContractMethod<[], [void], "nonpayable">;
|
|
76
|
+
|
|
77
|
+
test2: TypedContractMethod<[], [void], "nonpayable">;
|
|
78
|
+
|
|
79
|
+
getFunction<T extends ContractMethod = ContractMethod>(
|
|
80
|
+
key: string | FunctionFragment
|
|
81
|
+
): T;
|
|
82
|
+
|
|
83
|
+
getFunction(
|
|
84
|
+
nameOrSignature: "test1"
|
|
85
|
+
): TypedContractMethod<[], [void], "nonpayable">;
|
|
86
|
+
getFunction(
|
|
87
|
+
nameOrSignature: "test2"
|
|
88
|
+
): TypedContractMethod<[], [void], "nonpayable">;
|
|
89
|
+
|
|
90
|
+
filters: {};
|
|
91
|
+
}
|
|
@@ -9,6 +9,7 @@ export type { MinMaxTestsContract } from "./MinMaxTestsContract";
|
|
|
9
9
|
export type { Miscellaneous1TestsContract } from "./Miscellaneous1TestsContract";
|
|
10
10
|
export type { MiscellaneousTestsContract } from "./MiscellaneousTestsContract";
|
|
11
11
|
export type { OffboardToUserKeyTestContract } from "./OffboardToUserKeyTestContract";
|
|
12
|
+
export type { ShiftTestsContract } from "./ShiftTestsContract";
|
|
12
13
|
export type { StringTestsContract } from "./StringTestsContract";
|
|
13
14
|
export type { TransferScalarTestsContract } from "./TransferScalarTestsContract";
|
|
14
15
|
export type { TransferTestsContract } from "./TransferTestsContract";
|
|
@@ -51,6 +51,8 @@ export interface ExtendedOperationsInterface extends Interface {
|
|
|
51
51
|
| "RandBoundedBits"
|
|
52
52
|
| "Rem"
|
|
53
53
|
| "SetPublic"
|
|
54
|
+
| "Shl"
|
|
55
|
+
| "Shr"
|
|
54
56
|
| "Sub"
|
|
55
57
|
| "Transfer"
|
|
56
58
|
| "TransferWithAllowance"
|
|
@@ -167,6 +169,14 @@ export interface ExtendedOperationsInterface extends Interface {
|
|
|
167
169
|
functionFragment: "SetPublic",
|
|
168
170
|
values: [BytesLike, BigNumberish]
|
|
169
171
|
): string;
|
|
172
|
+
encodeFunctionData(
|
|
173
|
+
functionFragment: "Shl",
|
|
174
|
+
values: [BytesLike, BigNumberish, BigNumberish]
|
|
175
|
+
): string;
|
|
176
|
+
encodeFunctionData(
|
|
177
|
+
functionFragment: "Shr",
|
|
178
|
+
values: [BytesLike, BigNumberish, BigNumberish]
|
|
179
|
+
): string;
|
|
170
180
|
encodeFunctionData(
|
|
171
181
|
functionFragment: "Sub",
|
|
172
182
|
values: [BytesLike, BigNumberish, BigNumberish]
|
|
@@ -225,6 +235,8 @@ export interface ExtendedOperationsInterface extends Interface {
|
|
|
225
235
|
): Result;
|
|
226
236
|
decodeFunctionResult(functionFragment: "Rem", data: BytesLike): Result;
|
|
227
237
|
decodeFunctionResult(functionFragment: "SetPublic", data: BytesLike): Result;
|
|
238
|
+
decodeFunctionResult(functionFragment: "Shl", data: BytesLike): Result;
|
|
239
|
+
decodeFunctionResult(functionFragment: "Shr", data: BytesLike): Result;
|
|
228
240
|
decodeFunctionResult(functionFragment: "Sub", data: BytesLike): Result;
|
|
229
241
|
decodeFunctionResult(functionFragment: "Transfer", data: BytesLike): Result;
|
|
230
242
|
decodeFunctionResult(
|
|
@@ -445,6 +457,18 @@ export interface ExtendedOperations extends BaseContract {
|
|
|
445
457
|
"nonpayable"
|
|
446
458
|
>;
|
|
447
459
|
|
|
460
|
+
Shl: TypedContractMethod<
|
|
461
|
+
[metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
|
|
462
|
+
[bigint],
|
|
463
|
+
"nonpayable"
|
|
464
|
+
>;
|
|
465
|
+
|
|
466
|
+
Shr: TypedContractMethod<
|
|
467
|
+
[metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
|
|
468
|
+
[bigint],
|
|
469
|
+
"nonpayable"
|
|
470
|
+
>;
|
|
471
|
+
|
|
448
472
|
Sub: TypedContractMethod<
|
|
449
473
|
[metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
|
|
450
474
|
[bigint],
|
|
@@ -681,6 +705,20 @@ export interface ExtendedOperations extends BaseContract {
|
|
|
681
705
|
[bigint],
|
|
682
706
|
"nonpayable"
|
|
683
707
|
>;
|
|
708
|
+
getFunction(
|
|
709
|
+
nameOrSignature: "Shl"
|
|
710
|
+
): TypedContractMethod<
|
|
711
|
+
[metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
|
|
712
|
+
[bigint],
|
|
713
|
+
"nonpayable"
|
|
714
|
+
>;
|
|
715
|
+
getFunction(
|
|
716
|
+
nameOrSignature: "Shr"
|
|
717
|
+
): TypedContractMethod<
|
|
718
|
+
[metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
|
|
719
|
+
[bigint],
|
|
720
|
+
"nonpayable"
|
|
721
|
+
>;
|
|
684
722
|
getFunction(
|
|
685
723
|
nameOrSignature: "Sub"
|
|
686
724
|
): TypedContractMethod<
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* Autogenerated file. Do not edit manually. */
|
|
2
|
+
/* tslint:disable */
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
import {
|
|
5
|
+
Contract,
|
|
6
|
+
ContractFactory,
|
|
7
|
+
ContractTransactionResponse,
|
|
8
|
+
Interface,
|
|
9
|
+
} from "ethers";
|
|
10
|
+
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
|
|
11
|
+
import type { NonPayableOverrides } from "../../common";
|
|
12
|
+
import type { GasTest, GasTestInterface } from "../../contracts/GasTest";
|
|
13
|
+
|
|
14
|
+
const _abi = [
|
|
15
|
+
{
|
|
16
|
+
inputs: [],
|
|
17
|
+
name: "test1",
|
|
18
|
+
outputs: [],
|
|
19
|
+
stateMutability: "nonpayable",
|
|
20
|
+
type: "function",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
inputs: [],
|
|
24
|
+
name: "test2",
|
|
25
|
+
outputs: [],
|
|
26
|
+
stateMutability: "nonpayable",
|
|
27
|
+
type: "function",
|
|
28
|
+
},
|
|
29
|
+
] as const;
|
|
30
|
+
|
|
31
|
+
const _bytecode =
|
|
32
|
+
"0x608060405234801561001057600080fd5b506102d0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806366e41cb71461003b5780636b59084d14610045575b600080fd5b61004361004d565b005b61004361006a565b60006100596002610072565b9050610066816001610126565b5050565b600061006660025b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff8216602482015260009060649063d9b60b60906044016020604051808303816000875af11580156100fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101209190610281565b92915050565b600060646339bd1d8d61013c60048060026101f5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905267ffffffffffffffff851660448201526064016020604051808303816000875af11580156101ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ee9190610281565b9392505050565b600081600281111561020957610209610252565b60ff16600884600481111561022057610220610252565b61ffff16901b61ffff16601086600481111561023e5761023e610252565b62ffffff16901b171760e81b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561029357600080fd5b505191905056fea264697066735822122024b86f1e2c83704d02af06383a52cfa1bb753ac769faefd6871f17140246e1f564736f6c63430008130033";
|
|
33
|
+
|
|
34
|
+
type GasTestConstructorParams =
|
|
35
|
+
| [signer?: Signer]
|
|
36
|
+
| ConstructorParameters<typeof ContractFactory>;
|
|
37
|
+
|
|
38
|
+
const isSuperArgs = (
|
|
39
|
+
xs: GasTestConstructorParams
|
|
40
|
+
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
|
|
41
|
+
|
|
42
|
+
export class GasTest__factory extends ContractFactory {
|
|
43
|
+
constructor(...args: GasTestConstructorParams) {
|
|
44
|
+
if (isSuperArgs(args)) {
|
|
45
|
+
super(...args);
|
|
46
|
+
} else {
|
|
47
|
+
super(_abi, _bytecode, args[0]);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override getDeployTransaction(
|
|
52
|
+
overrides?: NonPayableOverrides & { from?: string }
|
|
53
|
+
): Promise<ContractDeployTransaction> {
|
|
54
|
+
return super.getDeployTransaction(overrides || {});
|
|
55
|
+
}
|
|
56
|
+
override deploy(overrides?: NonPayableOverrides & { from?: string }) {
|
|
57
|
+
return super.deploy(overrides || {}) as Promise<
|
|
58
|
+
GasTest & {
|
|
59
|
+
deploymentTransaction(): ContractTransactionResponse;
|
|
60
|
+
}
|
|
61
|
+
>;
|
|
62
|
+
}
|
|
63
|
+
override connect(runner: ContractRunner | null): GasTest__factory {
|
|
64
|
+
return super.connect(runner) as GasTest__factory;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static readonly bytecode = _bytecode;
|
|
68
|
+
static readonly abi = _abi;
|
|
69
|
+
static createInterface(): GasTestInterface {
|
|
70
|
+
return new Interface(_abi) as GasTestInterface;
|
|
71
|
+
}
|
|
72
|
+
static connect(address: string, runner?: ContractRunner | null): GasTest {
|
|
73
|
+
return new Contract(address, _abi, runner) as unknown as GasTest;
|
|
74
|
+
}
|
|
75
|
+
}
|