@aztec/l1-artifacts 0.0.1-commit.e310a4c8 → 0.0.1-commit.e558bd1c
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/dest/HonkVerifierBytecode.d.ts +2 -2
- package/dest/HonkVerifierBytecode.d.ts.map +1 -1
- package/dest/HonkVerifierBytecode.js +1 -1
- package/l1-contracts/cache/solidity-files-cache.json +1 -1
- package/l1-contracts/foundry.toml +1 -1
- package/l1-contracts/generated/HonkVerifier.sol +77 -82
- package/l1-contracts/out/CoinIssuer.sol/CoinIssuer.json +1 -1
- package/l1-contracts/out/DateGatedRelayer.sol/DateGatedRelayer.json +1 -1
- package/l1-contracts/out/DeployAztecL1Contracts.s.sol/DeployAztecL1Contracts.json +1 -1
- package/l1-contracts/out/DeployAztecL1Contracts.t.sol/DeployAztecL1ContractsTest.json +1 -1
- package/l1-contracts/out/DeployRollupForUpgrade.s.sol/DeployRollupForUpgrade.json +1 -1
- package/l1-contracts/out/DeployRollupForUpgrade.t.sol/DeployRollupForUpgradeTest.json +1 -1
- package/l1-contracts/out/DeployRollupLib.sol/DeployRollupLib.json +1 -1
- package/l1-contracts/out/DeploymentConfiguration.sol/DeploymentConfiguration.json +1 -1
- package/l1-contracts/out/FeeAssetHandler.sol/FeeAssetHandler.json +1 -1
- package/l1-contracts/out/FlushRewarder.sol/FlushRewarder.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/BaseHonkVerifier.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/CommitmentSchemeLib.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/FrLib.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/Honk.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/HonkVerificationKey.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/HonkVerifier.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/IVerifier.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/RelationsLib.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/TranscriptLib.json +1 -1
- package/l1-contracts/out/IDateGatedRelayer.sol/IDateGatedRelayer.json +1 -1
- package/l1-contracts/out/IFlushRewarder.sol/IFlushRewarder.json +1 -1
- package/l1-contracts/out/IMintableERC20.sol/IMintableERC20.json +1 -1
- package/l1-contracts/out/ISlashFactory.sol/ISlashFactory.json +1 -1
- package/l1-contracts/out/InputsExtractor.sol/InputsExtractor.json +1 -1
- package/l1-contracts/out/MockERC20.sol/MockERC20.json +1 -1
- package/l1-contracts/out/MockERC721.sol/MockERC721.json +1 -1
- package/l1-contracts/out/MockFeeJuicePortal.sol/MockFeeJuicePortal.json +1 -1
- package/l1-contracts/out/MockVerifier.sol/MockVerifier.json +1 -1
- package/l1-contracts/out/MockZKPassportVerifier.sol/MockZKPassportVerifier.json +1 -1
- package/l1-contracts/out/MultiAdder.sol/MultiAdder.json +1 -1
- package/l1-contracts/out/RegisterNewRollupVersionPayload.sol/RegisterNewRollupVersionPayload.json +1 -1
- package/l1-contracts/out/Registry.sol/Registry.json +1 -1
- package/l1-contracts/out/RewardDistributor.sol/RewardDistributor.json +1 -1
- package/l1-contracts/out/RollupConfiguration.sol/RollupConfiguration.json +1 -1
- package/l1-contracts/out/SlashFactory.sol/SlashFactory.json +1 -1
- package/l1-contracts/out/SlashPayload.sol/SlashPayload.json +1 -1
- package/l1-contracts/out/StakingAssetHandler.sol/StakingAssetHandler.json +1 -1
- package/l1-contracts/out/StdError.sol/stdError.json +1 -1
- package/l1-contracts/out/TestERC20.sol/TestERC20.json +1 -1
- package/l1-contracts/out/ZKPassportHelper.sol/ZKPassportHelper.json +1 -1
- package/l1-contracts/out/ZKPassportRootVerifier.sol/ZKPassportRootVerifier.json +1 -1
- package/l1-contracts/out/ZKPassportSubVerifier.sol/ZKPassportSubVerifier.json +1 -1
- package/l1-contracts/out/build-info/{bcca871da7c17f8e.json → 6b707081690bc1a6.json} +1 -1
- package/l1-contracts/out/build-info/{33d81a4b1b05e4ba.json → 948f40d6c0589dfb.json} +1 -1
- package/l1-contracts/out/shouting.t.sol/ScreamAndShoutTest.json +1 -1
- package/l1-contracts/script/deploy/DeployRollupForUpgrade.s.sol +17 -1
- package/l1-contracts/test/script/DeployAztecL1Contracts.t.sol +61 -0
- package/l1-contracts/test/script/DeployRollupForUpgrade.t.sol +112 -0
- package/package.json +1 -1
- package/l1-contracts/solc-0.8.30 +0 -0
|
@@ -6,7 +6,7 @@ out = 'out'
|
|
|
6
6
|
libs = ['lib']
|
|
7
7
|
# NOTE!: This line defines the solc version used.
|
|
8
8
|
# It is downloaded by bootstrap.sh, but the version string here is parsed.
|
|
9
|
-
|
|
9
|
+
solc_version = "0.8.30"
|
|
10
10
|
evm_version = 'prague'
|
|
11
11
|
optimizer = true
|
|
12
12
|
match_path = "test/**/*.t.sol"
|
|
@@ -4,85 +4,85 @@ pragma solidity >=0.8.21;
|
|
|
4
4
|
|
|
5
5
|
uint256 constant N = 16777216;
|
|
6
6
|
uint256 constant LOG_N = 24;
|
|
7
|
-
uint256 constant NUMBER_OF_PUBLIC_INPUTS =
|
|
8
|
-
uint256 constant VK_HASH =
|
|
7
|
+
uint256 constant NUMBER_OF_PUBLIC_INPUTS = 167;
|
|
8
|
+
uint256 constant VK_HASH = 0x03283433ea4127dbfc7e979496d557867240e6a1ca611eb1684aaadb63b9a7fd;
|
|
9
9
|
library HonkVerificationKey {
|
|
10
10
|
function loadVerificationKey() internal pure returns (Honk.VerificationKey memory) {
|
|
11
11
|
Honk.VerificationKey memory vk = Honk.VerificationKey({
|
|
12
12
|
circuitSize: uint256(16777216),
|
|
13
13
|
logCircuitSize: uint256(24),
|
|
14
|
-
publicInputsSize: uint256(
|
|
14
|
+
publicInputsSize: uint256(167),
|
|
15
15
|
ql: Honk.G1Point({
|
|
16
|
-
x: uint256(
|
|
17
|
-
y: uint256(
|
|
16
|
+
x: uint256(0x06a12e97212b59b98c6c2fe4eb2a5c72a30cc0e1e91f0e4ed172b799a9fab7d5),
|
|
17
|
+
y: uint256(0x1fb4b0f8e12e5cd975184c58041a8a7bbe34d5f4c761ae2f2230149a51e9e654)
|
|
18
18
|
}),
|
|
19
19
|
qr: Honk.G1Point({
|
|
20
|
-
x: uint256(
|
|
21
|
-
y: uint256(
|
|
20
|
+
x: uint256(0x0c067799b7cabe77e4eb7e35ee24e367b0f6cc07232ef176d11978b6548e6767),
|
|
21
|
+
y: uint256(0x0b7570919561a62913a84189015f45f1778bc4fab1418fe058f679314a5abd9c)
|
|
22
22
|
}),
|
|
23
23
|
qo: Honk.G1Point({
|
|
24
|
-
x: uint256(
|
|
25
|
-
y: uint256(
|
|
24
|
+
x: uint256(0x2c51ac1e1c0f608352eb0056b45a45f2ad450d772cfcd9cc5c81b9f76474e372),
|
|
25
|
+
y: uint256(0x1baa38146c622af2bb4f30efa399a689783bc8f588af0352f9501970ba20a87b)
|
|
26
26
|
}),
|
|
27
27
|
q4: Honk.G1Point({
|
|
28
|
-
x: uint256(
|
|
29
|
-
y: uint256(
|
|
28
|
+
x: uint256(0x030e47bfb15824bb1a220786bbcfede7bd47a6a1c514ae8e941217d19eca1a06),
|
|
29
|
+
y: uint256(0x13d415b5a45fd6dc6993e94f773608278d071c1c040782915a0c6a64656deb8a)
|
|
30
30
|
}),
|
|
31
31
|
qm: Honk.G1Point({
|
|
32
|
-
x: uint256(
|
|
33
|
-
y: uint256(
|
|
32
|
+
x: uint256(0x29f13b36c63603df2c6cdd0b843a5ccf83c98ea1a0fb68c4a0db553cab1311da),
|
|
33
|
+
y: uint256(0x1c715aa948a89a92d1cf42c53c6e9b75bc7ef5b6a26551089ea4592af7bc23c6)
|
|
34
34
|
}),
|
|
35
35
|
qc: Honk.G1Point({
|
|
36
|
-
x: uint256(
|
|
37
|
-
y: uint256(
|
|
36
|
+
x: uint256(0x28ef3f7c626ce65a6902c8f5df1099fa1a7134bb48e6d3d08ee16db205e889b3),
|
|
37
|
+
y: uint256(0x2a959acd6e8b7f1d2637e82e3ee258a7d836c1af9fcbf966717010080df1eaa2)
|
|
38
38
|
}),
|
|
39
39
|
qLookup: Honk.G1Point({
|
|
40
|
-
x: uint256(
|
|
41
|
-
y: uint256(
|
|
40
|
+
x: uint256(0x0d5cd90aceba65851b2ed0af6db9a5d741f62886d05381d516916a3e1b72cbf6),
|
|
41
|
+
y: uint256(0x08207020e5d8f9360f392c108796ee1b6b58c6cd8a259a85ac8c76ac30fcac45)
|
|
42
42
|
}),
|
|
43
43
|
qArith: Honk.G1Point({
|
|
44
|
-
x: uint256(
|
|
45
|
-
y: uint256(
|
|
44
|
+
x: uint256(0x1eb813f3af6a65dbd7199c4f80225777d30877959a5efd16b9460252ee9455a3),
|
|
45
|
+
y: uint256(0x23db0e832dacb3d57e84df60498392ceb8c9ebded1f3486433ca9d51eb9f5e18)
|
|
46
46
|
}),
|
|
47
47
|
qDeltaRange: Honk.G1Point({
|
|
48
|
-
x: uint256(
|
|
49
|
-
y: uint256(
|
|
48
|
+
x: uint256(0x1075a1f463c1fcf4a98ef8157e0b313a1845f58e2fcfd9024d936f2cb7a4a33a),
|
|
49
|
+
y: uint256(0x28f5f4038a3cf23fdd1e1b2edfe561b0457053ffd7c4eb48ddfee86d380b4ff4)
|
|
50
50
|
}),
|
|
51
51
|
qElliptic: Honk.G1Point({
|
|
52
|
-
x: uint256(
|
|
53
|
-
y: uint256(
|
|
52
|
+
x: uint256(0x10cedadab7e912bbe987fc86334eed65f97df6fd5f55eef455d5c50fa34a745d),
|
|
53
|
+
y: uint256(0x1945f210a1324a76edca3a9dafea7f5ee9327c42200a8590c5e5228ae339fa4b)
|
|
54
54
|
}),
|
|
55
55
|
qMemory: Honk.G1Point({
|
|
56
|
-
x: uint256(
|
|
57
|
-
y: uint256(
|
|
56
|
+
x: uint256(0x108ba73a24e693b4280b41380e417e1a66581a60e698d7ad91ba6796af94cfc7),
|
|
57
|
+
y: uint256(0x22dd20de874310e033e20f35adf11eb07b5be49df338dc524dcf7127413426b8)
|
|
58
58
|
}),
|
|
59
59
|
qNnf: Honk.G1Point({
|
|
60
|
-
x: uint256(
|
|
61
|
-
y: uint256(
|
|
60
|
+
x: uint256(0x2ea423222f367697033b489ae4007f685f80dad5e179257bb95cb8f3b615bb90),
|
|
61
|
+
y: uint256(0x30066d85237e0918961a583a9cfaf0cfa21213fa902f4feabbf4a0bf835cd1d9)
|
|
62
62
|
}),
|
|
63
63
|
qPoseidon2External: Honk.G1Point({
|
|
64
|
-
x: uint256(
|
|
65
|
-
y: uint256(
|
|
64
|
+
x: uint256(0x01279e522f1aa5ee5f175649ac506acd35eea3f5aa52cd96e35aaf2ace0acf0b),
|
|
65
|
+
y: uint256(0x17309146bcd19bf48eb704e50be86506b8f6641c27827844c382e179c3efad1a)
|
|
66
66
|
}),
|
|
67
67
|
qPoseidon2Internal: Honk.G1Point({
|
|
68
|
-
x: uint256(
|
|
69
|
-
y: uint256(
|
|
68
|
+
x: uint256(0x2532ed35f6d84a7987415f529052293b0299c119ac3ea159ed09d489b9ff3b85),
|
|
69
|
+
y: uint256(0x0291068f76ff6a133110ba332df3acbd2c429ef6fc7dc4e5890a30bd99257459)
|
|
70
70
|
}),
|
|
71
71
|
s1: Honk.G1Point({
|
|
72
|
-
x: uint256(
|
|
73
|
-
y: uint256(
|
|
72
|
+
x: uint256(0x09000a699e3ad80b08fbffe0f39319201c3c7df4e18b0dcf360e3ba7bba497ca),
|
|
73
|
+
y: uint256(0x024c9d2daf06a9effedaa31c8d3b10a2e61ed7de526d32ad7854dee103cda938)
|
|
74
74
|
}),
|
|
75
75
|
s2: Honk.G1Point({
|
|
76
|
-
x: uint256(
|
|
77
|
-
y: uint256(
|
|
76
|
+
x: uint256(0x12e3ff67a11b346fd08116eafe67cecdde0ce46a78fd23693e943b79178dca16),
|
|
77
|
+
y: uint256(0x1e25a991ccb6c56209cb6b4d2d00eb050886b10164dc4c72a8afce6b859f50dd)
|
|
78
78
|
}),
|
|
79
79
|
s3: Honk.G1Point({
|
|
80
|
-
x: uint256(
|
|
81
|
-
y: uint256(
|
|
80
|
+
x: uint256(0x0dcadef02eb38d2acb010e6034aae7ef2455bb9f0502ef7d8294724d0f48d3c1),
|
|
81
|
+
y: uint256(0x21aabf13f5bb0d86af4f22d133a143cd8a8b84f5f5fcd411cca79ab0324a7cae)
|
|
82
82
|
}),
|
|
83
83
|
s4: Honk.G1Point({
|
|
84
|
-
x: uint256(
|
|
85
|
-
y: uint256(
|
|
84
|
+
x: uint256(0x07dd9d2903434c1b090f16695e1933982b73338172cfbf30bd300c5c30dc3e48),
|
|
85
|
+
y: uint256(0x0683d4bbb0a94563fe197f1c94783375e1d39967506a6a1ed84dfb3dab76e0b9)
|
|
86
86
|
}),
|
|
87
87
|
t1: Honk.G1Point({
|
|
88
88
|
x: uint256(0x2194d92617bbb3ba3d9e53f4f13c5c7c6fc5ae0c56f06e0a35747f24625e5763),
|
|
@@ -101,28 +101,28 @@ library HonkVerificationKey {
|
|
|
101
101
|
y: uint256(0x283eb52c07506637e09fb73d7875ada840d8e4c75295a90dc312b4d2571c52c3)
|
|
102
102
|
}),
|
|
103
103
|
id1: Honk.G1Point({
|
|
104
|
-
x: uint256(
|
|
105
|
-
y: uint256(
|
|
104
|
+
x: uint256(0x28f0fe6358b508e50d0c0974e90ca964107acf7c6410c12fc3fb548626c31ff6),
|
|
105
|
+
y: uint256(0x096568eeeaa264778d6197602ec70948ebee44cee79334edcf01cd4128077762)
|
|
106
106
|
}),
|
|
107
107
|
id2: Honk.G1Point({
|
|
108
|
-
x: uint256(
|
|
109
|
-
y: uint256(
|
|
108
|
+
x: uint256(0x1925b8a1fc15bda192821e9617de6226fc18da486488b66c9b02370a0f02ee55),
|
|
109
|
+
y: uint256(0x2f217ad241880b147481da14527aa1732c9e68a95e011f579a394cb2f254c059)
|
|
110
110
|
}),
|
|
111
111
|
id3: Honk.G1Point({
|
|
112
|
-
x: uint256(
|
|
113
|
-
y: uint256(
|
|
112
|
+
x: uint256(0x1c3e3dd8ed2267546aec250cd822afcb940ee0df0f2ac62ccc64ef10a32fa39b),
|
|
113
|
+
y: uint256(0x04d84ffe345778db75e2003b3a2947fb5d612646f169b4749bd0f6d2a00b21d5)
|
|
114
114
|
}),
|
|
115
115
|
id4: Honk.G1Point({
|
|
116
|
-
x: uint256(
|
|
117
|
-
y: uint256(
|
|
116
|
+
x: uint256(0x00b5bffe09de82571170c06d65833eb42cfe96327efdb70e31ffab79d854ef12),
|
|
117
|
+
y: uint256(0x2ebca7701bb11eab3da3ca5e88bee81374034d18f452407a4016d69b64427cbe)
|
|
118
118
|
}),
|
|
119
119
|
lagrangeFirst: Honk.G1Point({
|
|
120
120
|
x: uint256(0x0000000000000000000000000000000000000000000000000000000000000001),
|
|
121
121
|
y: uint256(0x0000000000000000000000000000000000000000000000000000000000000002)
|
|
122
122
|
}),
|
|
123
123
|
lagrangeLast: Honk.G1Point({
|
|
124
|
-
x: uint256(
|
|
125
|
-
y: uint256(
|
|
124
|
+
x: uint256(0x177e3cdf761b7ac2ca1a76ed4d7808b7df0dc7b82589529a692642fa1d94c676),
|
|
125
|
+
y: uint256(0x016f7afe942b343181bdb40aaf4b5aece1c9d2aed1cd4ff3a7c3dadf36bbd494)
|
|
126
126
|
})
|
|
127
127
|
});
|
|
128
128
|
return vk;
|
|
@@ -185,7 +185,7 @@ library FrLib {
|
|
|
185
185
|
mstore(add(free, 0x20), 0x20)
|
|
186
186
|
mstore(add(free, 0x40), 0x20)
|
|
187
187
|
mstore(add(free, 0x60), v)
|
|
188
|
-
mstore(add(free, 0x80), sub(MODULUS, 2))
|
|
188
|
+
mstore(add(free, 0x80), sub(MODULUS, 2))
|
|
189
189
|
mstore(add(free, 0xa0), MODULUS)
|
|
190
190
|
let success := staticcall(gas(), 0x05, free, 0xc0, 0x00, 0x20)
|
|
191
191
|
if iszero(success) {
|
|
@@ -209,7 +209,7 @@ library FrLib {
|
|
|
209
209
|
mstore(add(free, 0x20), 0x20)
|
|
210
210
|
mstore(add(free, 0x40), 0x20)
|
|
211
211
|
mstore(add(free, 0x60), b)
|
|
212
|
-
mstore(add(free, 0x80), v)
|
|
212
|
+
mstore(add(free, 0x80), v)
|
|
213
213
|
mstore(add(free, 0xa0), MODULUS)
|
|
214
214
|
let success := staticcall(gas(), 0x05, free, 0xc0, 0x00, 0x20)
|
|
215
215
|
if iszero(success) {
|
|
@@ -299,7 +299,7 @@ uint256 constant NUMBER_OF_ENTITIES_ZK = NUMBER_OF_ENTITIES + NUM_MASKING_POLYNO
|
|
|
299
299
|
uint256 constant NUMBER_UNSHIFTED = 36;
|
|
300
300
|
uint256 constant NUMBER_UNSHIFTED_ZK = NUMBER_UNSHIFTED + NUM_MASKING_POLYNOMIALS;
|
|
301
301
|
uint256 constant NUMBER_TO_BE_SHIFTED = 5;
|
|
302
|
-
uint256 constant PAIRING_POINTS_SIZE =
|
|
302
|
+
uint256 constant PAIRING_POINTS_SIZE = 8;
|
|
303
303
|
|
|
304
304
|
uint256 constant FIELD_ELEMENT_SIZE = 0x20;
|
|
305
305
|
uint256 constant GROUP_ELEMENT_SIZE = 0x40;
|
|
@@ -886,42 +886,42 @@ library RelationsLib {
|
|
|
886
886
|
Fr[NUMBER_OF_SUBRELATIONS] memory evals,
|
|
887
887
|
Fr domainSep
|
|
888
888
|
) internal pure {
|
|
889
|
-
Fr
|
|
890
|
-
Fr
|
|
889
|
+
Fr table_term;
|
|
890
|
+
Fr lookup_term;
|
|
891
891
|
|
|
892
892
|
// Calculate the write term (the table accumulation)
|
|
893
|
-
//
|
|
893
|
+
// table_term = table_1 + γ + table_2 * β + table_3 * β² + table_4 * β³
|
|
894
894
|
{
|
|
895
895
|
Fr beta_sqr = rp.beta * rp.beta;
|
|
896
|
-
|
|
896
|
+
table_term = wire(p, WIRE.TABLE_1) + rp.gamma + (wire(p, WIRE.TABLE_2) * rp.beta)
|
|
897
897
|
+ (wire(p, WIRE.TABLE_3) * beta_sqr) + (wire(p, WIRE.TABLE_4) * beta_sqr * rp.beta);
|
|
898
898
|
}
|
|
899
899
|
|
|
900
900
|
// Calculate the read term
|
|
901
|
-
//
|
|
901
|
+
// lookup_term = derived_entry_1 + γ + derived_entry_2 * β + derived_entry_3 * β² + q_index * β³
|
|
902
902
|
{
|
|
903
903
|
Fr beta_sqr = rp.beta * rp.beta;
|
|
904
904
|
Fr derived_entry_1 = wire(p, WIRE.W_L) + rp.gamma + (wire(p, WIRE.Q_R) * wire(p, WIRE.W_L_SHIFT));
|
|
905
905
|
Fr derived_entry_2 = wire(p, WIRE.W_R) + wire(p, WIRE.Q_M) * wire(p, WIRE.W_R_SHIFT);
|
|
906
906
|
Fr derived_entry_3 = wire(p, WIRE.W_O) + wire(p, WIRE.Q_C) * wire(p, WIRE.W_O_SHIFT);
|
|
907
907
|
|
|
908
|
-
|
|
908
|
+
lookup_term = derived_entry_1 + (derived_entry_2 * rp.beta) + (derived_entry_3 * beta_sqr)
|
|
909
909
|
+ (wire(p, WIRE.Q_O) * beta_sqr * rp.beta);
|
|
910
910
|
}
|
|
911
911
|
|
|
912
|
-
Fr
|
|
913
|
-
Fr
|
|
912
|
+
Fr lookup_inverse = wire(p, WIRE.LOOKUP_INVERSES) * table_term;
|
|
913
|
+
Fr table_inverse = wire(p, WIRE.LOOKUP_INVERSES) * lookup_term;
|
|
914
914
|
|
|
915
915
|
Fr inverse_exists_xor =
|
|
916
916
|
wire(p, WIRE.LOOKUP_READ_TAGS) + wire(p, WIRE.Q_LOOKUP)
|
|
917
917
|
- (wire(p, WIRE.LOOKUP_READ_TAGS) * wire(p, WIRE.Q_LOOKUP));
|
|
918
918
|
|
|
919
919
|
// Inverse calculated correctly relation
|
|
920
|
-
Fr accumulatorNone =
|
|
920
|
+
Fr accumulatorNone = lookup_term * table_term * wire(p, WIRE.LOOKUP_INVERSES) - inverse_exists_xor;
|
|
921
921
|
accumulatorNone = accumulatorNone * domainSep;
|
|
922
922
|
|
|
923
923
|
// Inverse
|
|
924
|
-
Fr accumulatorOne = wire(p, WIRE.Q_LOOKUP) *
|
|
924
|
+
Fr accumulatorOne = wire(p, WIRE.Q_LOOKUP) * lookup_inverse - wire(p, WIRE.LOOKUP_READ_COUNTS) * table_inverse;
|
|
925
925
|
|
|
926
926
|
Fr read_tag = wire(p, WIRE.LOOKUP_READ_TAGS);
|
|
927
927
|
|
|
@@ -1585,41 +1585,36 @@ function negateInplace(Honk.G1Point memory point) pure returns (Honk.G1Point mem
|
|
|
1585
1585
|
/**
|
|
1586
1586
|
* Convert the pairing points to G1 points.
|
|
1587
1587
|
*
|
|
1588
|
-
* The pairing points are serialised as an array of
|
|
1589
|
-
*
|
|
1588
|
+
* The pairing points are serialised as an array of 136-bit limbs representing two points
|
|
1589
|
+
* (P0 and P1, used for lhs and rhs of pairing operation).
|
|
1590
1590
|
*
|
|
1591
|
-
* There are
|
|
1591
|
+
* There are 2 limbs (lo, hi) for each coordinate, so 4 limbs per point, 8 total.
|
|
1592
|
+
* Layout: [P0.x_lo, P0.x_hi, P0.y_lo, P0.y_hi, P1.x_lo, P1.x_hi, P1.y_lo, P1.y_hi]
|
|
1592
1593
|
*
|
|
1593
1594
|
* @param pairingPoints The pairing points to convert.
|
|
1594
|
-
* @return lhs
|
|
1595
|
-
* @return rhs
|
|
1595
|
+
* @return lhs P0 point
|
|
1596
|
+
* @return rhs P1 point
|
|
1596
1597
|
*/
|
|
1597
1598
|
function convertPairingPointsToG1(Fr[PAIRING_POINTS_SIZE] memory pairingPoints)
|
|
1598
1599
|
pure
|
|
1599
1600
|
returns (Honk.G1Point memory lhs, Honk.G1Point memory rhs)
|
|
1600
1601
|
{
|
|
1602
|
+
// P0 (lhs): x = lo + hi << 136
|
|
1601
1603
|
uint256 lhsX = Fr.unwrap(pairingPoints[0]);
|
|
1602
|
-
lhsX |= Fr.unwrap(pairingPoints[1]) <<
|
|
1603
|
-
lhsX |= Fr.unwrap(pairingPoints[2]) << 136;
|
|
1604
|
-
lhsX |= Fr.unwrap(pairingPoints[3]) << 204;
|
|
1604
|
+
lhsX |= Fr.unwrap(pairingPoints[1]) << 136;
|
|
1605
1605
|
lhs.x = lhsX;
|
|
1606
1606
|
|
|
1607
|
-
uint256 lhsY = Fr.unwrap(pairingPoints[
|
|
1608
|
-
lhsY |= Fr.unwrap(pairingPoints[
|
|
1609
|
-
lhsY |= Fr.unwrap(pairingPoints[6]) << 136;
|
|
1610
|
-
lhsY |= Fr.unwrap(pairingPoints[7]) << 204;
|
|
1607
|
+
uint256 lhsY = Fr.unwrap(pairingPoints[2]);
|
|
1608
|
+
lhsY |= Fr.unwrap(pairingPoints[3]) << 136;
|
|
1611
1609
|
lhs.y = lhsY;
|
|
1612
1610
|
|
|
1613
|
-
|
|
1614
|
-
rhsX
|
|
1615
|
-
rhsX |= Fr.unwrap(pairingPoints[
|
|
1616
|
-
rhsX |= Fr.unwrap(pairingPoints[11]) << 204;
|
|
1611
|
+
// P1 (rhs): x = lo + hi << 136
|
|
1612
|
+
uint256 rhsX = Fr.unwrap(pairingPoints[4]);
|
|
1613
|
+
rhsX |= Fr.unwrap(pairingPoints[5]) << 136;
|
|
1617
1614
|
rhs.x = rhsX;
|
|
1618
1615
|
|
|
1619
|
-
uint256 rhsY = Fr.unwrap(pairingPoints[
|
|
1620
|
-
rhsY |= Fr.unwrap(pairingPoints[
|
|
1621
|
-
rhsY |= Fr.unwrap(pairingPoints[14]) << 136;
|
|
1622
|
-
rhsY |= Fr.unwrap(pairingPoints[15]) << 204;
|
|
1616
|
+
uint256 rhsY = Fr.unwrap(pairingPoints[6]);
|
|
1617
|
+
rhsY |= Fr.unwrap(pairingPoints[7]) << 136;
|
|
1623
1618
|
rhs.y = rhsY;
|
|
1624
1619
|
}
|
|
1625
1620
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"constructor","inputs":[{"name":"_asset","type":"address","internalType":"contract IMintableERC20"},{"name":"_annualPercentage","type":"uint256","internalType":"uint256"},{"name":"_owner","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMintableERC20"}],"stateMutability":"view"},{"type":"function","name":"DEPLOYMENT_TIME","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"NOMINAL_ANNUAL_PERCENTAGE_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptTokenOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cachedBudget","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"cachedBudgetYear","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mintAvailable","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BudgetReset","inputs":[{"name":"newYear","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"newBudget","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"CoinIssuer__InsufficientMintAvailable","inputs":[{"name":"available","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"CoinIssuer__InvalidConfiguration","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60e060405234801561000f575f5ffd5b5060405161091d38038061091d83398101604081905261002e916101dc565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100ee565b506001600160a01b03831660805260a08290524260c0525f60015561008861013d565b60028190556100aa57604051634fffd55f60e11b815260040160405180910390fd5b5f7ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2176002546040516100de91815260200190565b60405180910390a250505061027b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f670de0b6b3a764000060a0516080516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ac919061021c565b6101b69190610233565b6101c0919061025c565b905090565b6001600160a01b03811681146101d9575f5ffd5b50565b5f5f5f606084860312156101ee575f5ffd5b83516101f9816101c5565b602085015160408601519194509250610211816101c5565b809150509250925092565b5f6020828403121561022c575f5ffd5b5051919050565b808202811582820484141761025657634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8261027657634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c0516106566102c75f395f8181610177015261045a01525f818161012f015261049a01525f818160e8015281816101b60152818161029e01526104bb01526106565ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c806372c908bc1161006e57806372c908bc1461012a57806378acc00a146101515780638da5cb5b1461015a57806399f19cea1461016a578063e84721cb14610172578063f2fde38b14610199575f5ffd5b806319308f68146100aa57806338a5e016146100c657806340c10f19146100d05780634800d97f146100e3578063715018a614610122575b5f5ffd5b6100b360015481565b6040519081526020015b60405180910390f35b6100ce6101ac565b005b6100ce6100de36600461055e565b610224565b61010a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bd565b6100ce6102fa565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100b360025481565b5f546001600160a01b031661010a565b6100b361030d565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100ce6101a7366004610586565b610338565b6101b4610375565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561020c575f5ffd5b505af115801561021e573d5f5f3e3d5ffd5b50505050565b61022c610375565b6102346103a1565b6002548082818111156102685760405163a1cc879960e01b8152600481019290925260248201526044015b60405180910390fd5b50610275905082826105ba565b6002556040516340c10f1960e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b1580156102df575f5ffd5b505af11580156102f1573d5f5f3e3d5ffd5b50505050505050565b610302610375565b61030b5f610400565b565b5f5f61031761044f565b9050806001541061032a57505060025490565b61033261048e565b91505090565b610340610375565b6001600160a01b03811661036957604051631e4fbdf760e01b81525f600482015260240161025f565b61037281610400565b50565b5f546001600160a01b0316331461030b5760405163118cdaa760e01b815233600482015260240161025f565b5f6103aa61044f565b90508060015410156103725760018190556103c361048e565b600281905560405190815281907ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2179060200160405180910390a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6301e1338061047f7f0000000000000000000000000000000000000000000000000000000000000000426105ba565b61048991906105d3565b905090565b5f670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053991906105f2565b61047f9190610609565b80356001600160a01b0381168114610559575f5ffd5b919050565b5f5f6040838503121561056f575f5ffd5b61057883610543565b946020939093013593505050565b5f60208284031215610596575f5ffd5b61059f82610543565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105cd576105cd6105a6565b92915050565b5f826105ed57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610602575f5ffd5b5051919050565b80820281158282048414176105cd576105cd6105a656fea264697066735822122096c967904366126e4422bc2914c7480db4dd73ae74619fc52b824ef7fcd4e46e64736f6c634300081e0033","sourceMap":"2618:3303:125:-:0;;;2995:504;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3081:6;-1:-1:-1;;;;;1273:26:35;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:35;;1350:1;1322:31;;;872:51:172;845:18;;1322:31:35;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;3095:14:125;::::1;;::::0;3115:49:::1;::::0;;;3188:15:::1;3170:33;::::0;3229:1:::1;3210:16;:20:::0;3251:15:::1;:13;:15::i;:::-;3236:12;:30:::0;;;3386:68:::1;;;;-1:-1:-1::0;;;3386:68:125::1;;;;;;;;;;;;3478:1;3466:28;3481:12;;3466:28;;;;1080:25:172::0;;1068:2;1053:18;;934:177;3466:28:125::1;;;;;;;;2995:504:::0;;;2618:3303;;2912:187:35;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:35;;;-1:-1:-1;;;;;;3020:17:35;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5787:132:125:-;5834:7;5910:4;5878:29;;5856:5;;-1:-1:-1;;;;;5856:17:125;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;:58;;;;:::i;:::-;5849:65;;5787:132;:::o;14:147:172:-;-1:-1:-1;;;;;105:31:172;;95:42;;85:70;;151:1;148;141:12;85:70;14:147;:::o;166:555::-;279:6;287;295;348:2;336:9;327:7;323:23;319:32;316:52;;;364:1;361;354:12;316:52;396:9;390:16;415:47;456:5;415:47;:::i;:::-;552:2;537:18;;531:25;627:2;612:18;;606:25;481:5;;-1:-1:-1;531:25:172;-1:-1:-1;640:49:172;606:25;640:49;:::i;:::-;708:7;698:17;;;166:555;;;;;:::o;1116:230::-;1186:6;1239:2;1227:9;1218:7;1214:23;1210:32;1207:52;;;1255:1;1252;1245:12;1207:52;-1:-1:-1;1300:16:172;;1116:230;-1:-1:-1;1116:230:172:o;1351:265::-;1424:9;;;1455;;1472:15;;;1466:22;;1452:37;1442:168;;1532:10;1527:3;1523:20;1520:1;1513:31;1567:4;1564:1;1557:15;1595:4;1592:1;1585:15;1442:168;1351:265;;;;:::o;1621:217::-;1661:1;1687;1677:132;;1731:10;1726:3;1722:20;1719:1;1712:31;1766:4;1763:1;1756:15;1794:4;1791:1;1784:15;1677:132;-1:-1:-1;1823:9:172;;1621:217::o;:::-;2618:3303:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c806372c908bc1161006e57806372c908bc1461012a57806378acc00a146101515780638da5cb5b1461015a57806399f19cea1461016a578063e84721cb14610172578063f2fde38b14610199575f5ffd5b806319308f68146100aa57806338a5e016146100c657806340c10f19146100d05780634800d97f146100e3578063715018a614610122575b5f5ffd5b6100b360015481565b6040519081526020015b60405180910390f35b6100ce6101ac565b005b6100ce6100de36600461055e565b610224565b61010a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bd565b6100ce6102fa565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100b360025481565b5f546001600160a01b031661010a565b6100b361030d565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100ce6101a7366004610586565b610338565b6101b4610375565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561020c575f5ffd5b505af115801561021e573d5f5f3e3d5ffd5b50505050565b61022c610375565b6102346103a1565b6002548082818111156102685760405163a1cc879960e01b8152600481019290925260248201526044015b60405180910390fd5b50610275905082826105ba565b6002556040516340c10f1960e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b1580156102df575f5ffd5b505af11580156102f1573d5f5f3e3d5ffd5b50505050505050565b610302610375565b61030b5f610400565b565b5f5f61031761044f565b9050806001541061032a57505060025490565b61033261048e565b91505090565b610340610375565b6001600160a01b03811661036957604051631e4fbdf760e01b81525f600482015260240161025f565b61037281610400565b50565b5f546001600160a01b0316331461030b5760405163118cdaa760e01b815233600482015260240161025f565b5f6103aa61044f565b90508060015410156103725760018190556103c361048e565b600281905560405190815281907ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2179060200160405180910390a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6301e1338061047f7f0000000000000000000000000000000000000000000000000000000000000000426105ba565b61048991906105d3565b905090565b5f670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053991906105f2565b61047f9190610609565b80356001600160a01b0381168114610559575f5ffd5b919050565b5f5f6040838503121561056f575f5ffd5b61057883610543565b946020939093013593505050565b5f60208284031215610596575f5ffd5b61059f82610543565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105cd576105cd6105a6565b92915050565b5f826105ed57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610602575f5ffd5b5051919050565b80820281158282048414176105cd576105cd6105a656fea264697066735822122096c967904366126e4422bc2914c7480db4dd73ae74619fc52b824ef7fcd4e46e64736f6c634300081e0033","sourceMap":"2618:3303:125:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2928:31;;;;;;;;;160:25:172;;;148:2;133:18;2928:31:125;;;;;;;;3503:130;;;:::i;:::-;;3858:418;;;;;;:::i;:::-;;:::i;2666:37::-;;;;;;;;-1:-1:-1;;;;;822:32:172;;;804:51;;792:2;777:18;2666:37:125;633:228:172;2293:101:35;;;:::i;2707:54:125:-;;;;;2963:27;;;;;;1638:85:35;1684:7;1710:6;-1:-1:-1;;;;;1710:6:35;1638:85;;4565:348:125;;;:::i;2765:40::-;;;;;2543:215:35;;;;;;:::i;:::-;;:::i;3503:130:125:-;1531:13:35;:11;:13::i;:::-;3603:5:125::1;-1:-1:-1::0;;;;;3582:44:125::1;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3503:130::o:0;3858:418::-;1531:13:35;:11;:13::i;:::-;4048:23:125::1;:21;:23::i;:::-;4095:12;::::0;;4122:7;:17;;::::1;;4114:89;;;::::0;-1:-1:-1;;;4114:89:125;;::::1;::::0;::::1;1439:25:172::0;;;;1480:18;;;1473:34;1412:18;;4114:89:125::1;;;;;;;;;-1:-1:-1::0;4224:16:125::1;::::0;-1:-1:-1;4233:7:125;4224:6;:16:::1;:::i;:::-;4209:12;:31:::0;4247:24:::1;::::0;-1:-1:-1;;;4247:24:125;;-1:-1:-1;;;;;1975:32:172;;;4247:24:125::1;::::0;::::1;1957:51:172::0;2024:18;;;2017:34;;;4247:5:125::1;:10;::::0;::::1;::::0;1930:18:172;;4247:24:125::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3943:333;3858:418:::0;;:::o;2293:101:35:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;4565:348:125:-;4633:7;4648:19;4670;:17;:19::i;:::-;4648:41;;4779:11;4759:16;;:31;4755:71;;-1:-1:-1;;4807:12:125;;;4565:348::o;4755:71::-;4893:15;:13;:15::i;:::-;4886:22;;;4565:348;:::o;2543:215:35:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:35;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:35;;2700:1:::1;2672:31;::::0;::::1;804:51:172::0;777:18;;2672:31:35::1;633:228:172::0;2623:91:35::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:35;735:10:48;1855:23:35;1851:101;;1901:40;;-1:-1:-1;;;1901:40:35;;735:10:48;1901:40:35;;;804:51:172;777:18;;1901:40:35;633:228:172;5173:326:125;5220:19;5242;:17;:19::i;:::-;5220:41;;5347:11;5328:16;;:30;5324:171;;;5368:16;:30;;;5421:15;:13;:15::i;:::-;5406:12;:30;;;5450:38;;160:25:172;;;5462:11:125;;5450:38;;148:2:172;133:18;5450:38:125;;;;;;;5214:285;5173:326::o;2912:187:35:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:35;;;-1:-1:-1;;;;;;3020:17:35;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5589:124:125:-;5640:7;5700:8;5663:33;5681:15;5663;:33;:::i;:::-;5662:46;;;;:::i;:::-;5655:53;;5589:124;:::o;5787:132::-;5834:7;5910:4;5878:29;5856:5;-1:-1:-1;;;;;5856:17:125;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;196:173:172:-;264:20;;-1:-1:-1;;;;;313:31:172;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:254::-;442:6;450;503:2;491:9;482:7;478:23;474:32;471:52;;;519:1;516;509:12;471:52;542:29;561:9;542:29;:::i;:::-;532:39;618:2;603:18;;;;590:32;;-1:-1:-1;;;374:254:172:o;1074:186::-;1133:6;1186:2;1174:9;1165:7;1161:23;1157:32;1154:52;;;1202:1;1199;1192:12;1154:52;1225:29;1244:9;1225:29;:::i;:::-;1215:39;1074:186;-1:-1:-1;;;1074:186:172:o;1518:127::-;1579:10;1574:3;1570:20;1567:1;1560:31;1610:4;1607:1;1600:15;1634:4;1631:1;1624:15;1650:128;1717:9;;;1738:11;;;1735:37;;;1752:18;;:::i;:::-;1650:128;;;;:::o;2062:217::-;2102:1;2128;2118:132;;2172:10;2167:3;2163:20;2160:1;2153:31;2207:4;2204:1;2197:15;2235:4;2232:1;2225:15;2118:132;-1:-1:-1;2264:9:172;;2062:217::o;2284:184::-;2354:6;2407:2;2395:9;2386:7;2382:23;2378:32;2375:52;;;2423:1;2420;2413:12;2375:52;-1:-1:-1;2446:16:172;;2284:184;-1:-1:-1;2284:184:172:o;2473:168::-;2546:9;;;2577;;2594:15;;;2588:22;;2574:37;2564:71;;2615:18;;:::i","linkReferences":{},"immutableReferences":{"90674":[{"start":232,"length":32},{"start":438,"length":32},{"start":670,"length":32},{"start":1211,"length":32}],"90676":[{"start":303,"length":32},{"start":1178,"length":32}],"90678":[{"start":375,"length":32},{"start":1114,"length":32}]}},"methodIdentifiers":{"ASSET()":"4800d97f","DEPLOYMENT_TIME()":"e84721cb","NOMINAL_ANNUAL_PERCENTAGE_CAP()":"72c908bc","acceptTokenOwnership()":"38a5e016","cachedBudget()":"78acc00a","cachedBudgetYear()":"19308f68","mint(address,uint256)":"40c10f19","mintAvailable()":"99f19cea","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IMintableERC20\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_annualPercentage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"CoinIssuer__InsufficientMintAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CoinIssuer__InvalidConfiguration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newYear\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBudget\",\"type\":\"uint256\"}],\"name\":\"BudgetReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET\",\"outputs\":[{\"internalType\":\"contract IMintableERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPLOYMENT_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOMINAL_ANNUAL_PERCENTAGE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cachedBudget\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cachedBudgetYear\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aztec Labs\",\"details\":\"The NOMINAL_ANNUAL_PERCENTAGE_CAP is in e18 precision where 1e18 = 100% Note that values larger than 100% are acceptedThe token MUST have a non-zero initial supply at deployment, or an alternative way to mint the token. If it has alternative ways to mint, these can bypass the budget.The `CoinIssuer` must be a minter of the `ASSET`. e.g., through a specified role, or by being the owner, or some other means.The `CoinIssuer` is limited to a single asset, if you need more, consider deploying multiple `CoinIssuer`s or use a different setup.Beware that the `CoinIssuer` might behave unexpected if the `ASSET` is a \\\"weird\\\" ERC20, e.g., fee-on-mint and fee-on-transfer or rebasing assets. Also manipulation of `totalSupply` outside of the `mint` function might have unexpected implications.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"mint(address,uint256)\":{\"details\":\"The `_amount` must be within the `cachedBudget`\",\"params\":{\"_amount\":\"- The amount to mint\",\"_to\":\"- The address to receive the funds\"}},\"mintAvailable()\":{\"returns\":{\"_0\":\"The amount mintable\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"CoinIssuer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"mint(address,uint256)\":{\"notice\":\"Mint `_amount` tokens to `_to`\"},\"mintAvailable()\":{\"notice\":\"The amount of funds that is available for \\\"minting\\\" in the current year If we've crossed into a new year since the last mint, returns the fresh budget for the new year based on current supply.\"}},\"notice\":\"A contract that allows minting of coins at a maximum percentage rate per year using discrete annual budgets This contract uses a discrete annual budget model: - Years are fixed periods from deployment: - year 0 = [deployment, deployment + 365d) - year 1 = [deployment + 365d, deployment + (2) * 365d) - ... - year n = [deployment + 365d * n, deployment + (n + 1) * 365d) - Each year's budget is calculated at the start of that year based on the actual supply at that moment - Budget = totalSupply() \\u00d7 NOMINAL_ANNUAL_PERCENTAGE_CAP / 1e18 - Unused budget from year N is LOST when year N+1 begins (use-it-or-lose-it) Rate semantics: If the full budget is minted every year, the effective annual inflation rate equals NOMINAL_ANNUAL_PERCENTAGE_CAP. For example, setting the rate to 0.10e18 (10%) and fully minting each year will result in supply growing by exactly 10% annually: supply(year N) = supply(year 0) \\u00d7 (1.10)^N Partial minting: If less than the full budget is minted in year N, the remaining allowance is lost at the year N\\u2192N+1 boundary. Year N+1's budget is calculated based on the actual supply at the start of year N+1, which reflects only what was actually minted.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/governance/CoinIssuer.sol\":\"CoinIssuer\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@aztec-blob-lib/=src/mock/libraries/\",\":@aztec/=src/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@oz/=lib/openzeppelin-contracts/contracts/\",\":@test/=test/\",\":@zkpassport-test/=lib/circuits/src/solidity/test/\",\":@zkpassport/=lib/circuits/src/solidity/src/\",\":circuits/=lib/circuits/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"src/governance/CoinIssuer.sol\":{\"keccak256\":\"0xfc08d22e69da2dd9e6e72a0849fe9113aa0019a9724021d3fc1f2be87268addb\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8ed7868d1a464027349f7d2a994f9597b11ee8ba4f8c447275e836abcd5c1a49\",\"dweb:/ipfs/QmQYQgeDGy72mATwZT9juznDprXxqdVPDfssmLQ3dGWBFT\"]},\"src/governance/interfaces/ICoinIssuer.sol\":{\"keccak256\":\"0x4ee032295392704515a4b6bd942a328d7b6b1a9ceed7825de23f230515fbe099\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f12a500a750a137a6107f3102b56dcb16e4ceeac87412629e7e168e2db1df8a2\",\"dweb:/ipfs/QmQgnN88BezXcERFseQyokdoPPdkcT6vrYmTXNEwG4631r\"]},\"src/governance/interfaces/IPayload.sol\":{\"keccak256\":\"0x5844ea725ce56ac8adeb20b2d37aa431ca087f68a65a7ca91f981be7458737c3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5ea670db51b2ccfac05a684b95458ecc015c9d12a6567c3f73d473386533f58c\",\"dweb:/ipfs/QmRUB8mckkGQ4nNsErRhnKMsD9SSkokRSpnr5XZC9dZdin\"]},\"src/governance/libraries/Errors.sol\":{\"keccak256\":\"0x10969348c5c4fe013e3193377131c0c347df148d9ffce7957290b0305c14c996\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9c96d1f13e931a0cc1949739e76d32a7fa92692e52543c5d27d0f30d7f792468\",\"dweb:/ipfs/QmY1uEwJ8mfcUw3LAcsEsxULkruATGpKzqZ8kxXXZ1ncgr\"]},\"src/shared/interfaces/IMintableERC20.sol\":{\"keccak256\":\"0x792359f95fa1aac4165c353db75ddc87f44bee6c4ccc407a233dcad19d406d28\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b77fd327a807fdff9718e03476031d4b43c632ab3a2a2c5d0f36ceed7a547a1d\",\"dweb:/ipfs/QmacpqXy9ZLC8XnDubj8ax7VxqXD4jmsW2uc6of6LpBjUp\"]},\"src/shared/libraries/TimeMath.sol\":{\"keccak256\":\"0x8da20dc8b4ce296b7c11f117a3381bfe5cd611a3512a74a500e2e54e0353417f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://18c74be98a4e31e8a16356e573514f639a8fc43928e741f6ead81dd755e9a914\",\"dweb:/ipfs/QmPDEdYYEj3DhXjrCDPuudJbhsBaNj1sK6hH94Z86168Q3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IMintableERC20","name":"_asset","type":"address"},{"internalType":"uint256","name":"_annualPercentage","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"CoinIssuer__InsufficientMintAvailable"},{"inputs":[],"type":"error","name":"CoinIssuer__InvalidConfiguration"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"uint256","name":"newYear","type":"uint256","indexed":true},{"internalType":"uint256","name":"newBudget","type":"uint256","indexed":false}],"type":"event","name":"BudgetReset","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ASSET","outputs":[{"internalType":"contract IMintableERC20","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEPLOYMENT_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NOMINAL_ANNUAL_PERCENTAGE_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptTokenOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"cachedBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"cachedBudgetYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"mintAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"mint(address,uint256)":{"details":"The `_amount` must be within the `cachedBudget`","params":{"_amount":"- The amount to mint","_to":"- The address to receive the funds"}},"mintAvailable()":{"returns":{"_0":"The amount mintable"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"mint(address,uint256)":{"notice":"Mint `_amount` tokens to `_to`"},"mintAvailable()":{"notice":"The amount of funds that is available for \"minting\" in the current year If we've crossed into a new year since the last mint, returns the fresh budget for the new year based on current supply."}},"version":1}},"settings":{"remappings":["@aztec-blob-lib/=src/mock/libraries/","@aztec/=src/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@oz/=lib/openzeppelin-contracts/contracts/","@test/=test/","@zkpassport-test/=lib/circuits/src/solidity/test/","@zkpassport/=lib/circuits/src/solidity/src/","circuits/=lib/circuits/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/governance/CoinIssuer.sol":"CoinIssuer"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol":{"keccak256":"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c","urls":["bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0","dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"src/governance/CoinIssuer.sol":{"keccak256":"0xfc08d22e69da2dd9e6e72a0849fe9113aa0019a9724021d3fc1f2be87268addb","urls":["bzz-raw://8ed7868d1a464027349f7d2a994f9597b11ee8ba4f8c447275e836abcd5c1a49","dweb:/ipfs/QmQYQgeDGy72mATwZT9juznDprXxqdVPDfssmLQ3dGWBFT"],"license":"Apache-2.0"},"src/governance/interfaces/ICoinIssuer.sol":{"keccak256":"0x4ee032295392704515a4b6bd942a328d7b6b1a9ceed7825de23f230515fbe099","urls":["bzz-raw://f12a500a750a137a6107f3102b56dcb16e4ceeac87412629e7e168e2db1df8a2","dweb:/ipfs/QmQgnN88BezXcERFseQyokdoPPdkcT6vrYmTXNEwG4631r"],"license":"Apache-2.0"},"src/governance/interfaces/IPayload.sol":{"keccak256":"0x5844ea725ce56ac8adeb20b2d37aa431ca087f68a65a7ca91f981be7458737c3","urls":["bzz-raw://5ea670db51b2ccfac05a684b95458ecc015c9d12a6567c3f73d473386533f58c","dweb:/ipfs/QmRUB8mckkGQ4nNsErRhnKMsD9SSkokRSpnr5XZC9dZdin"],"license":"Apache-2.0"},"src/governance/libraries/Errors.sol":{"keccak256":"0x10969348c5c4fe013e3193377131c0c347df148d9ffce7957290b0305c14c996","urls":["bzz-raw://9c96d1f13e931a0cc1949739e76d32a7fa92692e52543c5d27d0f30d7f792468","dweb:/ipfs/QmY1uEwJ8mfcUw3LAcsEsxULkruATGpKzqZ8kxXXZ1ncgr"],"license":"Apache-2.0"},"src/shared/interfaces/IMintableERC20.sol":{"keccak256":"0x792359f95fa1aac4165c353db75ddc87f44bee6c4ccc407a233dcad19d406d28","urls":["bzz-raw://b77fd327a807fdff9718e03476031d4b43c632ab3a2a2c5d0f36ceed7a547a1d","dweb:/ipfs/QmacpqXy9ZLC8XnDubj8ax7VxqXD4jmsW2uc6of6LpBjUp"],"license":"Apache-2.0"},"src/shared/libraries/TimeMath.sol":{"keccak256":"0x8da20dc8b4ce296b7c11f117a3381bfe5cd611a3512a74a500e2e54e0353417f","urls":["bzz-raw://18c74be98a4e31e8a16356e573514f639a8fc43928e741f6ead81dd755e9a914","dweb:/ipfs/QmPDEdYYEj3DhXjrCDPuudJbhsBaNj1sK6hH94Z86168Q3"],"license":"Apache-2.0"}},"version":1},"id":125}
|
|
1
|
+
{"abi":[{"type":"constructor","inputs":[{"name":"_asset","type":"address","internalType":"contract IMintableERC20"},{"name":"_annualPercentage","type":"uint256","internalType":"uint256"},{"name":"_owner","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMintableERC20"}],"stateMutability":"view"},{"type":"function","name":"DEPLOYMENT_TIME","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"NOMINAL_ANNUAL_PERCENTAGE_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptTokenOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cachedBudget","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"cachedBudgetYear","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mintAvailable","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BudgetReset","inputs":[{"name":"newYear","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"newBudget","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"CoinIssuer__InsufficientMintAvailable","inputs":[{"name":"available","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"CoinIssuer__InvalidConfiguration","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60e060405234801561000f575f5ffd5b5060405161091d38038061091d83398101604081905261002e916101dc565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100ee565b506001600160a01b03831660805260a08290524260c0525f60015561008861013d565b60028190556100aa57604051634fffd55f60e11b815260040160405180910390fd5b5f7ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2176002546040516100de91815260200190565b60405180910390a250505061027b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f670de0b6b3a764000060a0516080516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ac919061021c565b6101b69190610233565b6101c0919061025c565b905090565b6001600160a01b03811681146101d9575f5ffd5b50565b5f5f5f606084860312156101ee575f5ffd5b83516101f9816101c5565b602085015160408601519194509250610211816101c5565b809150509250925092565b5f6020828403121561022c575f5ffd5b5051919050565b808202811582820484141761025657634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8261027657634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c0516106566102c75f395f8181610177015261045a01525f818161012f015261049a01525f818160e8015281816101b60152818161029e01526104bb01526106565ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c806372c908bc1161006e57806372c908bc1461012a57806378acc00a146101515780638da5cb5b1461015a57806399f19cea1461016a578063e84721cb14610172578063f2fde38b14610199575f5ffd5b806319308f68146100aa57806338a5e016146100c657806340c10f19146100d05780634800d97f146100e3578063715018a614610122575b5f5ffd5b6100b360015481565b6040519081526020015b60405180910390f35b6100ce6101ac565b005b6100ce6100de36600461055e565b610224565b61010a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bd565b6100ce6102fa565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100b360025481565b5f546001600160a01b031661010a565b6100b361030d565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100ce6101a7366004610586565b610338565b6101b4610375565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561020c575f5ffd5b505af115801561021e573d5f5f3e3d5ffd5b50505050565b61022c610375565b6102346103a1565b6002548082818111156102685760405163a1cc879960e01b8152600481019290925260248201526044015b60405180910390fd5b50610275905082826105ba565b6002556040516340c10f1960e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b1580156102df575f5ffd5b505af11580156102f1573d5f5f3e3d5ffd5b50505050505050565b610302610375565b61030b5f610400565b565b5f5f61031761044f565b9050806001541061032a57505060025490565b61033261048e565b91505090565b610340610375565b6001600160a01b03811661036957604051631e4fbdf760e01b81525f600482015260240161025f565b61037281610400565b50565b5f546001600160a01b0316331461030b5760405163118cdaa760e01b815233600482015260240161025f565b5f6103aa61044f565b90508060015410156103725760018190556103c361048e565b600281905560405190815281907ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2179060200160405180910390a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6301e1338061047f7f0000000000000000000000000000000000000000000000000000000000000000426105ba565b61048991906105d3565b905090565b5f670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053991906105f2565b61047f9190610609565b80356001600160a01b0381168114610559575f5ffd5b919050565b5f5f6040838503121561056f575f5ffd5b61057883610543565b946020939093013593505050565b5f60208284031215610596575f5ffd5b61059f82610543565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105cd576105cd6105a6565b92915050565b5f826105ed57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610602575f5ffd5b5051919050565b80820281158282048414176105cd576105cd6105a656fea264697066735822122096c967904366126e4422bc2914c7480db4dd73ae74619fc52b824ef7fcd4e46e64736f6c634300081e0033","sourceMap":"2618:3303:125:-:0;;;2995:504;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3081:6;-1:-1:-1;;;;;1273:26:35;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:35;;1350:1;1322:31;;;872:51:173;845:18;;1322:31:35;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;3095:14:125;::::1;;::::0;3115:49:::1;::::0;;;3188:15:::1;3170:33;::::0;3229:1:::1;3210:16;:20:::0;3251:15:::1;:13;:15::i;:::-;3236:12;:30:::0;;;3386:68:::1;;;;-1:-1:-1::0;;;3386:68:125::1;;;;;;;;;;;;3478:1;3466:28;3481:12;;3466:28;;;;1080:25:173::0;;1068:2;1053:18;;934:177;3466:28:125::1;;;;;;;;2995:504:::0;;;2618:3303;;2912:187:35;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:35;;;-1:-1:-1;;;;;;3020:17:35;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5787:132:125:-;5834:7;5910:4;5878:29;;5856:5;;-1:-1:-1;;;;;5856:17:125;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;:58;;;;:::i;:::-;5849:65;;5787:132;:::o;14:147:173:-;-1:-1:-1;;;;;105:31:173;;95:42;;85:70;;151:1;148;141:12;85:70;14:147;:::o;166:555::-;279:6;287;295;348:2;336:9;327:7;323:23;319:32;316:52;;;364:1;361;354:12;316:52;396:9;390:16;415:47;456:5;415:47;:::i;:::-;552:2;537:18;;531:25;627:2;612:18;;606:25;481:5;;-1:-1:-1;531:25:173;-1:-1:-1;640:49:173;606:25;640:49;:::i;:::-;708:7;698:17;;;166:555;;;;;:::o;1116:230::-;1186:6;1239:2;1227:9;1218:7;1214:23;1210:32;1207:52;;;1255:1;1252;1245:12;1207:52;-1:-1:-1;1300:16:173;;1116:230;-1:-1:-1;1116:230:173:o;1351:265::-;1424:9;;;1455;;1472:15;;;1466:22;;1452:37;1442:168;;1532:10;1527:3;1523:20;1520:1;1513:31;1567:4;1564:1;1557:15;1595:4;1592:1;1585:15;1442:168;1351:265;;;;:::o;1621:217::-;1661:1;1687;1677:132;;1731:10;1726:3;1722:20;1719:1;1712:31;1766:4;1763:1;1756:15;1794:4;1791:1;1784:15;1677:132;-1:-1:-1;1823:9:173;;1621:217::o;:::-;2618:3303:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c806372c908bc1161006e57806372c908bc1461012a57806378acc00a146101515780638da5cb5b1461015a57806399f19cea1461016a578063e84721cb14610172578063f2fde38b14610199575f5ffd5b806319308f68146100aa57806338a5e016146100c657806340c10f19146100d05780634800d97f146100e3578063715018a614610122575b5f5ffd5b6100b360015481565b6040519081526020015b60405180910390f35b6100ce6101ac565b005b6100ce6100de36600461055e565b610224565b61010a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bd565b6100ce6102fa565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100b360025481565b5f546001600160a01b031661010a565b6100b361030d565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100ce6101a7366004610586565b610338565b6101b4610375565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561020c575f5ffd5b505af115801561021e573d5f5f3e3d5ffd5b50505050565b61022c610375565b6102346103a1565b6002548082818111156102685760405163a1cc879960e01b8152600481019290925260248201526044015b60405180910390fd5b50610275905082826105ba565b6002556040516340c10f1960e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b1580156102df575f5ffd5b505af11580156102f1573d5f5f3e3d5ffd5b50505050505050565b610302610375565b61030b5f610400565b565b5f5f61031761044f565b9050806001541061032a57505060025490565b61033261048e565b91505090565b610340610375565b6001600160a01b03811661036957604051631e4fbdf760e01b81525f600482015260240161025f565b61037281610400565b50565b5f546001600160a01b0316331461030b5760405163118cdaa760e01b815233600482015260240161025f565b5f6103aa61044f565b90508060015410156103725760018190556103c361048e565b600281905560405190815281907ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2179060200160405180910390a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6301e1338061047f7f0000000000000000000000000000000000000000000000000000000000000000426105ba565b61048991906105d3565b905090565b5f670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053991906105f2565b61047f9190610609565b80356001600160a01b0381168114610559575f5ffd5b919050565b5f5f6040838503121561056f575f5ffd5b61057883610543565b946020939093013593505050565b5f60208284031215610596575f5ffd5b61059f82610543565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105cd576105cd6105a6565b92915050565b5f826105ed57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610602575f5ffd5b5051919050565b80820281158282048414176105cd576105cd6105a656fea264697066735822122096c967904366126e4422bc2914c7480db4dd73ae74619fc52b824ef7fcd4e46e64736f6c634300081e0033","sourceMap":"2618:3303:125:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2928:31;;;;;;;;;160:25:173;;;148:2;133:18;2928:31:125;;;;;;;;3503:130;;;:::i;:::-;;3858:418;;;;;;:::i;:::-;;:::i;2666:37::-;;;;;;;;-1:-1:-1;;;;;822:32:173;;;804:51;;792:2;777:18;2666:37:125;633:228:173;2293:101:35;;;:::i;2707:54:125:-;;;;;2963:27;;;;;;1638:85:35;1684:7;1710:6;-1:-1:-1;;;;;1710:6:35;1638:85;;4565:348:125;;;:::i;2765:40::-;;;;;2543:215:35;;;;;;:::i;:::-;;:::i;3503:130:125:-;1531:13:35;:11;:13::i;:::-;3603:5:125::1;-1:-1:-1::0;;;;;3582:44:125::1;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3503:130::o:0;3858:418::-;1531:13:35;:11;:13::i;:::-;4048:23:125::1;:21;:23::i;:::-;4095:12;::::0;;4122:7;:17;;::::1;;4114:89;;;::::0;-1:-1:-1;;;4114:89:125;;::::1;::::0;::::1;1439:25:173::0;;;;1480:18;;;1473:34;1412:18;;4114:89:125::1;;;;;;;;;-1:-1:-1::0;4224:16:125::1;::::0;-1:-1:-1;4233:7:125;4224:6;:16:::1;:::i;:::-;4209:12;:31:::0;4247:24:::1;::::0;-1:-1:-1;;;4247:24:125;;-1:-1:-1;;;;;1975:32:173;;;4247:24:125::1;::::0;::::1;1957:51:173::0;2024:18;;;2017:34;;;4247:5:125::1;:10;::::0;::::1;::::0;1930:18:173;;4247:24:125::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3943:333;3858:418:::0;;:::o;2293:101:35:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;4565:348:125:-;4633:7;4648:19;4670;:17;:19::i;:::-;4648:41;;4779:11;4759:16;;:31;4755:71;;-1:-1:-1;;4807:12:125;;;4565:348::o;4755:71::-;4893:15;:13;:15::i;:::-;4886:22;;;4565:348;:::o;2543:215:35:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:35;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:35;;2700:1:::1;2672:31;::::0;::::1;804:51:173::0;777:18;;2672:31:35::1;633:228:173::0;2623:91:35::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:35;735:10:48;1855:23:35;1851:101;;1901:40;;-1:-1:-1;;;1901:40:35;;735:10:48;1901:40:35;;;804:51:173;777:18;;1901:40:35;633:228:173;5173:326:125;5220:19;5242;:17;:19::i;:::-;5220:41;;5347:11;5328:16;;:30;5324:171;;;5368:16;:30;;;5421:15;:13;:15::i;:::-;5406:12;:30;;;5450:38;;160:25:173;;;5462:11:125;;5450:38;;148:2:173;133:18;5450:38:125;;;;;;;5214:285;5173:326::o;2912:187:35:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:35;;;-1:-1:-1;;;;;;3020:17:35;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5589:124:125:-;5640:7;5700:8;5663:33;5681:15;5663;:33;:::i;:::-;5662:46;;;;:::i;:::-;5655:53;;5589:124;:::o;5787:132::-;5834:7;5910:4;5878:29;5856:5;-1:-1:-1;;;;;5856:17:125;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;196:173:173:-;264:20;;-1:-1:-1;;;;;313:31:173;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:254::-;442:6;450;503:2;491:9;482:7;478:23;474:32;471:52;;;519:1;516;509:12;471:52;542:29;561:9;542:29;:::i;:::-;532:39;618:2;603:18;;;;590:32;;-1:-1:-1;;;374:254:173:o;1074:186::-;1133:6;1186:2;1174:9;1165:7;1161:23;1157:32;1154:52;;;1202:1;1199;1192:12;1154:52;1225:29;1244:9;1225:29;:::i;:::-;1215:39;1074:186;-1:-1:-1;;;1074:186:173:o;1518:127::-;1579:10;1574:3;1570:20;1567:1;1560:31;1610:4;1607:1;1600:15;1634:4;1631:1;1624:15;1650:128;1717:9;;;1738:11;;;1735:37;;;1752:18;;:::i;:::-;1650:128;;;;:::o;2062:217::-;2102:1;2128;2118:132;;2172:10;2167:3;2163:20;2160:1;2153:31;2207:4;2204:1;2197:15;2235:4;2232:1;2225:15;2118:132;-1:-1:-1;2264:9:173;;2062:217::o;2284:184::-;2354:6;2407:2;2395:9;2386:7;2382:23;2378:32;2375:52;;;2423:1;2420;2413:12;2375:52;-1:-1:-1;2446:16:173;;2284:184;-1:-1:-1;2284:184:173:o;2473:168::-;2546:9;;;2577;;2594:15;;;2588:22;;2574:37;2564:71;;2615:18;;:::i","linkReferences":{},"immutableReferences":{"90631":[{"start":232,"length":32},{"start":438,"length":32},{"start":670,"length":32},{"start":1211,"length":32}],"90633":[{"start":303,"length":32},{"start":1178,"length":32}],"90635":[{"start":375,"length":32},{"start":1114,"length":32}]}},"methodIdentifiers":{"ASSET()":"4800d97f","DEPLOYMENT_TIME()":"e84721cb","NOMINAL_ANNUAL_PERCENTAGE_CAP()":"72c908bc","acceptTokenOwnership()":"38a5e016","cachedBudget()":"78acc00a","cachedBudgetYear()":"19308f68","mint(address,uint256)":"40c10f19","mintAvailable()":"99f19cea","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IMintableERC20\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_annualPercentage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"CoinIssuer__InsufficientMintAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CoinIssuer__InvalidConfiguration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newYear\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBudget\",\"type\":\"uint256\"}],\"name\":\"BudgetReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET\",\"outputs\":[{\"internalType\":\"contract IMintableERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPLOYMENT_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOMINAL_ANNUAL_PERCENTAGE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cachedBudget\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cachedBudgetYear\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aztec Labs\",\"details\":\"The NOMINAL_ANNUAL_PERCENTAGE_CAP is in e18 precision where 1e18 = 100% Note that values larger than 100% are acceptedThe token MUST have a non-zero initial supply at deployment, or an alternative way to mint the token. If it has alternative ways to mint, these can bypass the budget.The `CoinIssuer` must be a minter of the `ASSET`. e.g., through a specified role, or by being the owner, or some other means.The `CoinIssuer` is limited to a single asset, if you need more, consider deploying multiple `CoinIssuer`s or use a different setup.Beware that the `CoinIssuer` might behave unexpected if the `ASSET` is a \\\"weird\\\" ERC20, e.g., fee-on-mint and fee-on-transfer or rebasing assets. Also manipulation of `totalSupply` outside of the `mint` function might have unexpected implications.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"mint(address,uint256)\":{\"details\":\"The `_amount` must be within the `cachedBudget`\",\"params\":{\"_amount\":\"- The amount to mint\",\"_to\":\"- The address to receive the funds\"}},\"mintAvailable()\":{\"returns\":{\"_0\":\"The amount mintable\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"CoinIssuer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"mint(address,uint256)\":{\"notice\":\"Mint `_amount` tokens to `_to`\"},\"mintAvailable()\":{\"notice\":\"The amount of funds that is available for \\\"minting\\\" in the current year If we've crossed into a new year since the last mint, returns the fresh budget for the new year based on current supply.\"}},\"notice\":\"A contract that allows minting of coins at a maximum percentage rate per year using discrete annual budgets This contract uses a discrete annual budget model: - Years are fixed periods from deployment: - year 0 = [deployment, deployment + 365d) - year 1 = [deployment + 365d, deployment + (2) * 365d) - ... - year n = [deployment + 365d * n, deployment + (n + 1) * 365d) - Each year's budget is calculated at the start of that year based on the actual supply at that moment - Budget = totalSupply() \\u00d7 NOMINAL_ANNUAL_PERCENTAGE_CAP / 1e18 - Unused budget from year N is LOST when year N+1 begins (use-it-or-lose-it) Rate semantics: If the full budget is minted every year, the effective annual inflation rate equals NOMINAL_ANNUAL_PERCENTAGE_CAP. For example, setting the rate to 0.10e18 (10%) and fully minting each year will result in supply growing by exactly 10% annually: supply(year N) = supply(year 0) \\u00d7 (1.10)^N Partial minting: If less than the full budget is minted in year N, the remaining allowance is lost at the year N\\u2192N+1 boundary. Year N+1's budget is calculated based on the actual supply at the start of year N+1, which reflects only what was actually minted.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/governance/CoinIssuer.sol\":\"CoinIssuer\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@aztec-blob-lib/=src/mock/libraries/\",\":@aztec/=src/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@oz/=lib/openzeppelin-contracts/contracts/\",\":@test/=test/\",\":@zkpassport-test/=lib/circuits/src/solidity/test/\",\":@zkpassport/=lib/circuits/src/solidity/src/\",\":circuits/=lib/circuits/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"src/governance/CoinIssuer.sol\":{\"keccak256\":\"0xfc08d22e69da2dd9e6e72a0849fe9113aa0019a9724021d3fc1f2be87268addb\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8ed7868d1a464027349f7d2a994f9597b11ee8ba4f8c447275e836abcd5c1a49\",\"dweb:/ipfs/QmQYQgeDGy72mATwZT9juznDprXxqdVPDfssmLQ3dGWBFT\"]},\"src/governance/interfaces/ICoinIssuer.sol\":{\"keccak256\":\"0x4ee032295392704515a4b6bd942a328d7b6b1a9ceed7825de23f230515fbe099\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f12a500a750a137a6107f3102b56dcb16e4ceeac87412629e7e168e2db1df8a2\",\"dweb:/ipfs/QmQgnN88BezXcERFseQyokdoPPdkcT6vrYmTXNEwG4631r\"]},\"src/governance/interfaces/IPayload.sol\":{\"keccak256\":\"0x5844ea725ce56ac8adeb20b2d37aa431ca087f68a65a7ca91f981be7458737c3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5ea670db51b2ccfac05a684b95458ecc015c9d12a6567c3f73d473386533f58c\",\"dweb:/ipfs/QmRUB8mckkGQ4nNsErRhnKMsD9SSkokRSpnr5XZC9dZdin\"]},\"src/governance/libraries/Errors.sol\":{\"keccak256\":\"0x10969348c5c4fe013e3193377131c0c347df148d9ffce7957290b0305c14c996\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9c96d1f13e931a0cc1949739e76d32a7fa92692e52543c5d27d0f30d7f792468\",\"dweb:/ipfs/QmY1uEwJ8mfcUw3LAcsEsxULkruATGpKzqZ8kxXXZ1ncgr\"]},\"src/shared/interfaces/IMintableERC20.sol\":{\"keccak256\":\"0x792359f95fa1aac4165c353db75ddc87f44bee6c4ccc407a233dcad19d406d28\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b77fd327a807fdff9718e03476031d4b43c632ab3a2a2c5d0f36ceed7a547a1d\",\"dweb:/ipfs/QmacpqXy9ZLC8XnDubj8ax7VxqXD4jmsW2uc6of6LpBjUp\"]},\"src/shared/libraries/TimeMath.sol\":{\"keccak256\":\"0x8da20dc8b4ce296b7c11f117a3381bfe5cd611a3512a74a500e2e54e0353417f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://18c74be98a4e31e8a16356e573514f639a8fc43928e741f6ead81dd755e9a914\",\"dweb:/ipfs/QmPDEdYYEj3DhXjrCDPuudJbhsBaNj1sK6hH94Z86168Q3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IMintableERC20","name":"_asset","type":"address"},{"internalType":"uint256","name":"_annualPercentage","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"CoinIssuer__InsufficientMintAvailable"},{"inputs":[],"type":"error","name":"CoinIssuer__InvalidConfiguration"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"uint256","name":"newYear","type":"uint256","indexed":true},{"internalType":"uint256","name":"newBudget","type":"uint256","indexed":false}],"type":"event","name":"BudgetReset","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ASSET","outputs":[{"internalType":"contract IMintableERC20","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEPLOYMENT_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NOMINAL_ANNUAL_PERCENTAGE_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptTokenOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"cachedBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"cachedBudgetYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"mintAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"mint(address,uint256)":{"details":"The `_amount` must be within the `cachedBudget`","params":{"_amount":"- The amount to mint","_to":"- The address to receive the funds"}},"mintAvailable()":{"returns":{"_0":"The amount mintable"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"mint(address,uint256)":{"notice":"Mint `_amount` tokens to `_to`"},"mintAvailable()":{"notice":"The amount of funds that is available for \"minting\" in the current year If we've crossed into a new year since the last mint, returns the fresh budget for the new year based on current supply."}},"version":1}},"settings":{"remappings":["@aztec-blob-lib/=src/mock/libraries/","@aztec/=src/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@oz/=lib/openzeppelin-contracts/contracts/","@test/=test/","@zkpassport-test/=lib/circuits/src/solidity/test/","@zkpassport/=lib/circuits/src/solidity/src/","circuits/=lib/circuits/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/governance/CoinIssuer.sol":"CoinIssuer"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol":{"keccak256":"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c","urls":["bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0","dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"src/governance/CoinIssuer.sol":{"keccak256":"0xfc08d22e69da2dd9e6e72a0849fe9113aa0019a9724021d3fc1f2be87268addb","urls":["bzz-raw://8ed7868d1a464027349f7d2a994f9597b11ee8ba4f8c447275e836abcd5c1a49","dweb:/ipfs/QmQYQgeDGy72mATwZT9juznDprXxqdVPDfssmLQ3dGWBFT"],"license":"Apache-2.0"},"src/governance/interfaces/ICoinIssuer.sol":{"keccak256":"0x4ee032295392704515a4b6bd942a328d7b6b1a9ceed7825de23f230515fbe099","urls":["bzz-raw://f12a500a750a137a6107f3102b56dcb16e4ceeac87412629e7e168e2db1df8a2","dweb:/ipfs/QmQgnN88BezXcERFseQyokdoPPdkcT6vrYmTXNEwG4631r"],"license":"Apache-2.0"},"src/governance/interfaces/IPayload.sol":{"keccak256":"0x5844ea725ce56ac8adeb20b2d37aa431ca087f68a65a7ca91f981be7458737c3","urls":["bzz-raw://5ea670db51b2ccfac05a684b95458ecc015c9d12a6567c3f73d473386533f58c","dweb:/ipfs/QmRUB8mckkGQ4nNsErRhnKMsD9SSkokRSpnr5XZC9dZdin"],"license":"Apache-2.0"},"src/governance/libraries/Errors.sol":{"keccak256":"0x10969348c5c4fe013e3193377131c0c347df148d9ffce7957290b0305c14c996","urls":["bzz-raw://9c96d1f13e931a0cc1949739e76d32a7fa92692e52543c5d27d0f30d7f792468","dweb:/ipfs/QmY1uEwJ8mfcUw3LAcsEsxULkruATGpKzqZ8kxXXZ1ncgr"],"license":"Apache-2.0"},"src/shared/interfaces/IMintableERC20.sol":{"keccak256":"0x792359f95fa1aac4165c353db75ddc87f44bee6c4ccc407a233dcad19d406d28","urls":["bzz-raw://b77fd327a807fdff9718e03476031d4b43c632ab3a2a2c5d0f36ceed7a547a1d","dweb:/ipfs/QmacpqXy9ZLC8XnDubj8ax7VxqXD4jmsW2uc6of6LpBjUp"],"license":"Apache-2.0"},"src/shared/libraries/TimeMath.sol":{"keccak256":"0x8da20dc8b4ce296b7c11f117a3381bfe5cd611a3512a74a500e2e54e0353417f","urls":["bzz-raw://18c74be98a4e31e8a16356e573514f639a8fc43928e741f6ead81dd755e9a914","dweb:/ipfs/QmPDEdYYEj3DhXjrCDPuudJbhsBaNj1sK6hH94Z86168Q3"],"license":"Apache-2.0"}},"version":1},"id":125}
|