@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.
Files changed (56) hide show
  1. package/dest/HonkVerifierBytecode.d.ts +2 -2
  2. package/dest/HonkVerifierBytecode.d.ts.map +1 -1
  3. package/dest/HonkVerifierBytecode.js +1 -1
  4. package/l1-contracts/cache/solidity-files-cache.json +1 -1
  5. package/l1-contracts/foundry.toml +1 -1
  6. package/l1-contracts/generated/HonkVerifier.sol +77 -82
  7. package/l1-contracts/out/CoinIssuer.sol/CoinIssuer.json +1 -1
  8. package/l1-contracts/out/DateGatedRelayer.sol/DateGatedRelayer.json +1 -1
  9. package/l1-contracts/out/DeployAztecL1Contracts.s.sol/DeployAztecL1Contracts.json +1 -1
  10. package/l1-contracts/out/DeployAztecL1Contracts.t.sol/DeployAztecL1ContractsTest.json +1 -1
  11. package/l1-contracts/out/DeployRollupForUpgrade.s.sol/DeployRollupForUpgrade.json +1 -1
  12. package/l1-contracts/out/DeployRollupForUpgrade.t.sol/DeployRollupForUpgradeTest.json +1 -1
  13. package/l1-contracts/out/DeployRollupLib.sol/DeployRollupLib.json +1 -1
  14. package/l1-contracts/out/DeploymentConfiguration.sol/DeploymentConfiguration.json +1 -1
  15. package/l1-contracts/out/FeeAssetHandler.sol/FeeAssetHandler.json +1 -1
  16. package/l1-contracts/out/FlushRewarder.sol/FlushRewarder.json +1 -1
  17. package/l1-contracts/out/HonkVerifier.sol/BaseHonkVerifier.json +1 -1
  18. package/l1-contracts/out/HonkVerifier.sol/CommitmentSchemeLib.json +1 -1
  19. package/l1-contracts/out/HonkVerifier.sol/FrLib.json +1 -1
  20. package/l1-contracts/out/HonkVerifier.sol/Honk.json +1 -1
  21. package/l1-contracts/out/HonkVerifier.sol/HonkVerificationKey.json +1 -1
  22. package/l1-contracts/out/HonkVerifier.sol/HonkVerifier.json +1 -1
  23. package/l1-contracts/out/HonkVerifier.sol/IVerifier.json +1 -1
  24. package/l1-contracts/out/HonkVerifier.sol/RelationsLib.json +1 -1
  25. package/l1-contracts/out/HonkVerifier.sol/TranscriptLib.json +1 -1
  26. package/l1-contracts/out/IDateGatedRelayer.sol/IDateGatedRelayer.json +1 -1
  27. package/l1-contracts/out/IFlushRewarder.sol/IFlushRewarder.json +1 -1
  28. package/l1-contracts/out/IMintableERC20.sol/IMintableERC20.json +1 -1
  29. package/l1-contracts/out/ISlashFactory.sol/ISlashFactory.json +1 -1
  30. package/l1-contracts/out/InputsExtractor.sol/InputsExtractor.json +1 -1
  31. package/l1-contracts/out/MockERC20.sol/MockERC20.json +1 -1
  32. package/l1-contracts/out/MockERC721.sol/MockERC721.json +1 -1
  33. package/l1-contracts/out/MockFeeJuicePortal.sol/MockFeeJuicePortal.json +1 -1
  34. package/l1-contracts/out/MockVerifier.sol/MockVerifier.json +1 -1
  35. package/l1-contracts/out/MockZKPassportVerifier.sol/MockZKPassportVerifier.json +1 -1
  36. package/l1-contracts/out/MultiAdder.sol/MultiAdder.json +1 -1
  37. package/l1-contracts/out/RegisterNewRollupVersionPayload.sol/RegisterNewRollupVersionPayload.json +1 -1
  38. package/l1-contracts/out/Registry.sol/Registry.json +1 -1
  39. package/l1-contracts/out/RewardDistributor.sol/RewardDistributor.json +1 -1
  40. package/l1-contracts/out/RollupConfiguration.sol/RollupConfiguration.json +1 -1
  41. package/l1-contracts/out/SlashFactory.sol/SlashFactory.json +1 -1
  42. package/l1-contracts/out/SlashPayload.sol/SlashPayload.json +1 -1
  43. package/l1-contracts/out/StakingAssetHandler.sol/StakingAssetHandler.json +1 -1
  44. package/l1-contracts/out/StdError.sol/stdError.json +1 -1
  45. package/l1-contracts/out/TestERC20.sol/TestERC20.json +1 -1
  46. package/l1-contracts/out/ZKPassportHelper.sol/ZKPassportHelper.json +1 -1
  47. package/l1-contracts/out/ZKPassportRootVerifier.sol/ZKPassportRootVerifier.json +1 -1
  48. package/l1-contracts/out/ZKPassportSubVerifier.sol/ZKPassportSubVerifier.json +1 -1
  49. package/l1-contracts/out/build-info/{bcca871da7c17f8e.json → 6b707081690bc1a6.json} +1 -1
  50. package/l1-contracts/out/build-info/{33d81a4b1b05e4ba.json → 948f40d6c0589dfb.json} +1 -1
  51. package/l1-contracts/out/shouting.t.sol/ScreamAndShoutTest.json +1 -1
  52. package/l1-contracts/script/deploy/DeployRollupForUpgrade.s.sol +17 -1
  53. package/l1-contracts/test/script/DeployAztecL1Contracts.t.sol +61 -0
  54. package/l1-contracts/test/script/DeployRollupForUpgrade.t.sol +112 -0
  55. package/package.json +1 -1
  56. 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
- solc = "./solc-0.8.30"
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 = 175;
8
- uint256 constant VK_HASH = 0x14df98df2670d6b3040164748f97485945b94d6558c54e148cf7cc5f64f0d1f8;
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(175),
14
+ publicInputsSize: uint256(167),
15
15
  ql: Honk.G1Point({
16
- x: uint256(0x27847eb60113003e6048d692010d2f34a6bab66abacbcd61caef29cab6d449c3),
17
- y: uint256(0x0efd0069e03aae24e155656868bc035df2981e9fd15976796ac646416782aa53)
16
+ x: uint256(0x06a12e97212b59b98c6c2fe4eb2a5c72a30cc0e1e91f0e4ed172b799a9fab7d5),
17
+ y: uint256(0x1fb4b0f8e12e5cd975184c58041a8a7bbe34d5f4c761ae2f2230149a51e9e654)
18
18
  }),
19
19
  qr: Honk.G1Point({
20
- x: uint256(0x0a5b2a5256090326a00a42163677b4829941efbc11eb19bef1b5539efd61294c),
21
- y: uint256(0x27a19d279cceed3879d7450443897882caf7e3581ba3353c1f78ba1e6b82ac48)
20
+ x: uint256(0x0c067799b7cabe77e4eb7e35ee24e367b0f6cc07232ef176d11978b6548e6767),
21
+ y: uint256(0x0b7570919561a62913a84189015f45f1778bc4fab1418fe058f679314a5abd9c)
22
22
  }),
23
23
  qo: Honk.G1Point({
24
- x: uint256(0x028286f63006d05df4908855d06596e9340a64db1b4e01b51f396764d3515ca7),
25
- y: uint256(0x0cdb7d89e67240094775e5741041f607a485833412e08898b56c3c05652bfe0e)
24
+ x: uint256(0x2c51ac1e1c0f608352eb0056b45a45f2ad450d772cfcd9cc5c81b9f76474e372),
25
+ y: uint256(0x1baa38146c622af2bb4f30efa399a689783bc8f588af0352f9501970ba20a87b)
26
26
  }),
27
27
  q4: Honk.G1Point({
28
- x: uint256(0x2579ebceccd9bfa3fdd390fc03ae3abf05d351b7339cf3db68861b9fd0a9d908),
29
- y: uint256(0x297157bfac210a90374c90cd46287129d4bd134d61b0969a7e08eca684e517df)
28
+ x: uint256(0x030e47bfb15824bb1a220786bbcfede7bd47a6a1c514ae8e941217d19eca1a06),
29
+ y: uint256(0x13d415b5a45fd6dc6993e94f773608278d071c1c040782915a0c6a64656deb8a)
30
30
  }),
31
31
  qm: Honk.G1Point({
32
- x: uint256(0x1d9cb9d7cc64006646f3df3e62b599798c8c61b2c476167bd745f13cbcb336cf),
33
- y: uint256(0x24e6761b164d72e79971c2ca847f1bfc7963f76fb4744dbd3fbf884b9d13f816)
32
+ x: uint256(0x29f13b36c63603df2c6cdd0b843a5ccf83c98ea1a0fb68c4a0db553cab1311da),
33
+ y: uint256(0x1c715aa948a89a92d1cf42c53c6e9b75bc7ef5b6a26551089ea4592af7bc23c6)
34
34
  }),
35
35
  qc: Honk.G1Point({
36
- x: uint256(0x2e941d384dd60cf65119590a8dd0f73b837023432814b7d4c61a1fff5816cfdb),
37
- y: uint256(0x0f7add8130ab78e8060be7a64a44019567902336a55b0d134baaa7c59e8c0fc2)
36
+ x: uint256(0x28ef3f7c626ce65a6902c8f5df1099fa1a7134bb48e6d3d08ee16db205e889b3),
37
+ y: uint256(0x2a959acd6e8b7f1d2637e82e3ee258a7d836c1af9fcbf966717010080df1eaa2)
38
38
  }),
39
39
  qLookup: Honk.G1Point({
40
- x: uint256(0x14e11f086d7ccfc3c02ecfbc088af8a76c737f6b09014c4493310b6f43c12b1e),
41
- y: uint256(0x2a68571d45e0c3e4845d1b9a44e95e1d3848f411ba63e1aae95709c956675551)
40
+ x: uint256(0x0d5cd90aceba65851b2ed0af6db9a5d741f62886d05381d516916a3e1b72cbf6),
41
+ y: uint256(0x08207020e5d8f9360f392c108796ee1b6b58c6cd8a259a85ac8c76ac30fcac45)
42
42
  }),
43
43
  qArith: Honk.G1Point({
44
- x: uint256(0x20b9abe371b2651322996fb63b36d13538d0c0db6f6ccbddb728721b3f5e5c96),
45
- y: uint256(0x0246dc1b27480f4038ec2f99f3f4c6ee65d7712e1976dd5f06188f8bb0ed49c7)
44
+ x: uint256(0x1eb813f3af6a65dbd7199c4f80225777d30877959a5efd16b9460252ee9455a3),
45
+ y: uint256(0x23db0e832dacb3d57e84df60498392ceb8c9ebded1f3486433ca9d51eb9f5e18)
46
46
  }),
47
47
  qDeltaRange: Honk.G1Point({
48
- x: uint256(0x00bef0d9b68a8330fbda054d5f7d397a7bfc315cd43688a5bf9e4a79a9cfb572),
49
- y: uint256(0x18a87e55ecdea0b2388e9f0e850bde15f3c508d102b4bb1e7a1b7f60cdab3686)
48
+ x: uint256(0x1075a1f463c1fcf4a98ef8157e0b313a1845f58e2fcfd9024d936f2cb7a4a33a),
49
+ y: uint256(0x28f5f4038a3cf23fdd1e1b2edfe561b0457053ffd7c4eb48ddfee86d380b4ff4)
50
50
  }),
51
51
  qElliptic: Honk.G1Point({
52
- x: uint256(0x053f97c8e42c90dc2b46d69775469f54e39427c5faef3e9a0db94b6bb9f831eb),
53
- y: uint256(0x09f90c434a3a2ee58cc00018ac8da9526ce387f97a448de1553a61d5efca293e)
52
+ x: uint256(0x10cedadab7e912bbe987fc86334eed65f97df6fd5f55eef455d5c50fa34a745d),
53
+ y: uint256(0x1945f210a1324a76edca3a9dafea7f5ee9327c42200a8590c5e5228ae339fa4b)
54
54
  }),
55
55
  qMemory: Honk.G1Point({
56
- x: uint256(0x263821169579a7db7bf164508ea7b1951aae6af5732b77341ab62bbf1e445eb4),
57
- y: uint256(0x26eb45d875b3b31dbb51c82f14091c0b6281a77c0c5ac5f7faad686301fa4530)
56
+ x: uint256(0x108ba73a24e693b4280b41380e417e1a66581a60e698d7ad91ba6796af94cfc7),
57
+ y: uint256(0x22dd20de874310e033e20f35adf11eb07b5be49df338dc524dcf7127413426b8)
58
58
  }),
59
59
  qNnf: Honk.G1Point({
60
- x: uint256(0x1e123d620a2d96e97adf481e65d9a1f6a7f8c41d5ef8bd31cc45ea6f80184c3d),
61
- y: uint256(0x2e5794a1f47815a3c0158369fb50e721ab32603fd4edb543dd1a3bd5f9cb4ae6)
60
+ x: uint256(0x2ea423222f367697033b489ae4007f685f80dad5e179257bb95cb8f3b615bb90),
61
+ y: uint256(0x30066d85237e0918961a583a9cfaf0cfa21213fa902f4feabbf4a0bf835cd1d9)
62
62
  }),
63
63
  qPoseidon2External: Honk.G1Point({
64
- x: uint256(0x00c3459f447a9931225bf4741d1c9aeca29b38a105771775e41c0f8b997a8d37),
65
- y: uint256(0x2f073c67b0df2d38f9b9cf970173b532309414a7725bfe9b070c49a9cb0120ac)
64
+ x: uint256(0x01279e522f1aa5ee5f175649ac506acd35eea3f5aa52cd96e35aaf2ace0acf0b),
65
+ y: uint256(0x17309146bcd19bf48eb704e50be86506b8f6641c27827844c382e179c3efad1a)
66
66
  }),
67
67
  qPoseidon2Internal: Honk.G1Point({
68
- x: uint256(0x0568f5f391b0ca1ad7d6a3a0c6ccd54d226e036169095edf2bc7e84267269a77),
69
- y: uint256(0x2637d9fb5c49a52121f77ef8b87cb0b6cbb647758fadb59a0fcbc36a3e4cbf81)
68
+ x: uint256(0x2532ed35f6d84a7987415f529052293b0299c119ac3ea159ed09d489b9ff3b85),
69
+ y: uint256(0x0291068f76ff6a133110ba332df3acbd2c429ef6fc7dc4e5890a30bd99257459)
70
70
  }),
71
71
  s1: Honk.G1Point({
72
- x: uint256(0x0aedc518303b97e839f61f7e684e5841ae8d0d666e29f05419da1f986a6cef2b),
73
- y: uint256(0x131ed1a4df863fe4ea7f94b3d6d18d818e7ecdc30a39f4cbfb04df05a9f6f016)
72
+ x: uint256(0x09000a699e3ad80b08fbffe0f39319201c3c7df4e18b0dcf360e3ba7bba497ca),
73
+ y: uint256(0x024c9d2daf06a9effedaa31c8d3b10a2e61ed7de526d32ad7854dee103cda938)
74
74
  }),
75
75
  s2: Honk.G1Point({
76
- x: uint256(0x1fbb79e803c3e062879d9aa10a20054f46a9515b55459ff99630034f7cff656d),
77
- y: uint256(0x2881cf95f7536ca8aec1407af3d385fea3a24c44514900f5e0566f663c4790e8)
76
+ x: uint256(0x12e3ff67a11b346fd08116eafe67cecdde0ce46a78fd23693e943b79178dca16),
77
+ y: uint256(0x1e25a991ccb6c56209cb6b4d2d00eb050886b10164dc4c72a8afce6b859f50dd)
78
78
  }),
79
79
  s3: Honk.G1Point({
80
- x: uint256(0x12ff283fe9460e4a0e67fe6079694a88005ee164708ed01a2e5705daa6dd1cd9),
81
- y: uint256(0x1392475bbbaef7536ff1c546bccc3f93238232277f08b3d672e4b66fbcec1383)
80
+ x: uint256(0x0dcadef02eb38d2acb010e6034aae7ef2455bb9f0502ef7d8294724d0f48d3c1),
81
+ y: uint256(0x21aabf13f5bb0d86af4f22d133a143cd8a8b84f5f5fcd411cca79ab0324a7cae)
82
82
  }),
83
83
  s4: Honk.G1Point({
84
- x: uint256(0x222f6d2115dfd437c0b182f3912b74d35a4286de3353d36d8e93f1db57352b0d),
85
- y: uint256(0x20b55b77c275a90c61a0ddd0cadbfa4b41f35d690c9bc016a3da6f9a7e07d75e)
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(0x07b7bf778a4a4f5fe35c10e8bb9e467109c368c662322deef1f6819d96983ac9),
105
- y: uint256(0x18350deae666b24be7d654cf1437ebed2ad8d92e3359b208d186709f722e9b19)
104
+ x: uint256(0x28f0fe6358b508e50d0c0974e90ca964107acf7c6410c12fc3fb548626c31ff6),
105
+ y: uint256(0x096568eeeaa264778d6197602ec70948ebee44cee79334edcf01cd4128077762)
106
106
  }),
107
107
  id2: Honk.G1Point({
108
- x: uint256(0x1f15f6fd77323dab76d5af9ede42360e803af182791a91cef61f325c40b57ef3),
109
- y: uint256(0x2cda7a98826a052e73f61bb13ca429b7cedb05d13a5fc48154caa314ab124a2e)
108
+ x: uint256(0x1925b8a1fc15bda192821e9617de6226fc18da486488b66c9b02370a0f02ee55),
109
+ y: uint256(0x2f217ad241880b147481da14527aa1732c9e68a95e011f579a394cb2f254c059)
110
110
  }),
111
111
  id3: Honk.G1Point({
112
- x: uint256(0x259b6f7636b3ee6a0db3f71518910d684dbbfa67bf1202dbfca1f584aa0abd5f),
113
- y: uint256(0x164fac6641a65692bf1a1bbfae3a4f67c46e825ceeb91a1b66a0ca4225a732fc)
112
+ x: uint256(0x1c3e3dd8ed2267546aec250cd822afcb940ee0df0f2ac62ccc64ef10a32fa39b),
113
+ y: uint256(0x04d84ffe345778db75e2003b3a2947fb5d612646f169b4749bd0f6d2a00b21d5)
114
114
  }),
115
115
  id4: Honk.G1Point({
116
- x: uint256(0x1d0e7748f66648e20212db2fe8b9bbe8345459705b18918f2cf9dd08d35eaa09),
117
- y: uint256(0x092b3c3841f37b28c82c68e1ba4f97e271d61b29d9390fccfcb68b0041d991e3)
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(0x0989b1e1b8f685966ad282d1c4bb61b585653712c257ccad59c6f098e1aa6ee0),
125
- y: uint256(0x2be85d735fa2155cb588417ba94164a383d3adae5b70546c4bf28888aee6299f)
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 = 16;
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 write_term;
890
- Fr read_term;
889
+ Fr table_term;
890
+ Fr lookup_term;
891
891
 
892
892
  // Calculate the write term (the table accumulation)
893
- // write_term = table_1 + γ + table_2 * β + table_3 * β² + table_4 * β³
893
+ // table_term = table_1 + γ + table_2 * β + table_3 * β² + table_4 * β³
894
894
  {
895
895
  Fr beta_sqr = rp.beta * rp.beta;
896
- write_term = wire(p, WIRE.TABLE_1) + rp.gamma + (wire(p, WIRE.TABLE_2) * rp.beta)
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
- // read_term = derived_entry_1 + γ + derived_entry_2 * β + derived_entry_3 * β² + q_index * β³
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
- read_term = derived_entry_1 + (derived_entry_2 * rp.beta) + (derived_entry_3 * beta_sqr)
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 read_inverse = wire(p, WIRE.LOOKUP_INVERSES) * write_term;
913
- Fr write_inverse = wire(p, WIRE.LOOKUP_INVERSES) * read_term;
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 = read_term * write_term * wire(p, WIRE.LOOKUP_INVERSES) - inverse_exists_xor;
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) * read_inverse - wire(p, WIRE.LOOKUP_READ_COUNTS) * write_inverse;
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 68 bit limbs representing two points
1589
- * The lhs of a pairing operation and the rhs of a pairing operation
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 4 fields for each group element, leaving 8 fields for each side of the pairing.
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]) << 68;
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[4]);
1608
- lhsY |= Fr.unwrap(pairingPoints[5]) << 68;
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
- uint256 rhsX = Fr.unwrap(pairingPoints[8]);
1614
- rhsX |= Fr.unwrap(pairingPoints[9]) << 68;
1615
- rhsX |= Fr.unwrap(pairingPoints[10]) << 136;
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[12]);
1620
- rhsY |= Fr.unwrap(pairingPoints[13]) << 68;
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}