@aztec/l1-artifacts 0.0.1-commit.ee80a48 → 0.0.1-commit.f1df4d2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/HonkVerifierBytecode.d.ts +2 -2
- package/dest/HonkVerifierBytecode.d.ts.map +1 -1
- package/dest/HonkVerifierBytecode.js +1 -1
- package/l1-contracts/cache/solidity-files-cache.json +1 -1
- package/l1-contracts/foundry.toml +1 -1
- package/l1-contracts/generated/HonkVerifier.sol +65 -70
- package/l1-contracts/out/CoinIssuer.sol/CoinIssuer.json +1 -1
- package/l1-contracts/out/DateGatedRelayer.sol/DateGatedRelayer.json +1 -1
- package/l1-contracts/out/DeployAztecL1Contracts.s.sol/DeployAztecL1Contracts.json +1 -1
- package/l1-contracts/out/DeployAztecL1Contracts.t.sol/DeployAztecL1ContractsTest.json +1 -1
- package/l1-contracts/out/DeployRollupForUpgrade.s.sol/DeployRollupForUpgrade.json +1 -1
- package/l1-contracts/out/DeployRollupForUpgrade.t.sol/DeployRollupForUpgradeTest.json +1 -1
- package/l1-contracts/out/DeployRollupLib.sol/DeployRollupLib.json +1 -1
- package/l1-contracts/out/FeeAssetHandler.sol/FeeAssetHandler.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/BaseHonkVerifier.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/CommitmentSchemeLib.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/FrLib.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/Honk.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/HonkVerificationKey.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/HonkVerifier.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/IVerifier.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/RelationsLib.json +1 -1
- package/l1-contracts/out/HonkVerifier.sol/TranscriptLib.json +1 -1
- package/l1-contracts/out/MultiAdder.sol/MultiAdder.json +1 -1
- package/l1-contracts/out/RegisterNewRollupVersionPayload.sol/RegisterNewRollupVersionPayload.json +1 -1
- package/l1-contracts/out/RewardDistributor.sol/RewardDistributor.json +1 -1
- package/l1-contracts/out/SlashFactory.sol/SlashFactory.json +1 -1
- package/l1-contracts/out/SlashPayload.sol/SlashPayload.json +1 -1
- package/l1-contracts/out/StakingAssetHandler.sol/StakingAssetHandler.json +1 -1
- package/l1-contracts/out/ZKPassportHelper.sol/ZKPassportHelper.json +1 -1
- package/l1-contracts/out/build-info/{ed134eb980b30675.json → 8103921c6e825236.json} +1 -1
- package/l1-contracts/out/shouting.t.sol/ScreamAndShoutTest.json +1 -1
- package/package.json +1 -1
- package/l1-contracts/solc-0.8.30 +0 -0
|
@@ -6,7 +6,7 @@ out = 'out'
|
|
|
6
6
|
libs = ['lib']
|
|
7
7
|
# NOTE!: This line defines the solc version used.
|
|
8
8
|
# It is downloaded by bootstrap.sh, but the version string here is parsed.
|
|
9
|
-
|
|
9
|
+
solc_version = "0.8.30"
|
|
10
10
|
evm_version = 'prague'
|
|
11
11
|
optimizer = true
|
|
12
12
|
match_path = "test/**/*.t.sol"
|
|
@@ -4,85 +4,85 @@ pragma solidity >=0.8.21;
|
|
|
4
4
|
|
|
5
5
|
uint256 constant N = 16777216;
|
|
6
6
|
uint256 constant LOG_N = 24;
|
|
7
|
-
uint256 constant NUMBER_OF_PUBLIC_INPUTS =
|
|
8
|
-
uint256 constant VK_HASH =
|
|
7
|
+
uint256 constant NUMBER_OF_PUBLIC_INPUTS = 167;
|
|
8
|
+
uint256 constant VK_HASH = 0x2a2b5260a5f8fc50eea08d0543f7f5dc2aa4825beef73ff808ad417326ded211;
|
|
9
9
|
library HonkVerificationKey {
|
|
10
10
|
function loadVerificationKey() internal pure returns (Honk.VerificationKey memory) {
|
|
11
11
|
Honk.VerificationKey memory vk = Honk.VerificationKey({
|
|
12
12
|
circuitSize: uint256(16777216),
|
|
13
13
|
logCircuitSize: uint256(24),
|
|
14
|
-
publicInputsSize: uint256(
|
|
14
|
+
publicInputsSize: uint256(167),
|
|
15
15
|
ql: Honk.G1Point({
|
|
16
|
-
x: uint256(
|
|
17
|
-
y: uint256(
|
|
16
|
+
x: uint256(0x140d09360a71c7a29f191bcb60e3f62e054b03a33644871a06ef8cb26c5ffe56),
|
|
17
|
+
y: uint256(0x0ce20cdfec8ce2c91d98c163807c9ca2a5c1315b1d0071d9c6e3c57520edc6f5)
|
|
18
18
|
}),
|
|
19
19
|
qr: Honk.G1Point({
|
|
20
|
-
x: uint256(
|
|
21
|
-
y: uint256(
|
|
20
|
+
x: uint256(0x2f5b1dbafd4c9d7435b5c8f7b19b6eac214fab5a025a9774663aa1398866ba99),
|
|
21
|
+
y: uint256(0x10c7d7ef97c4d196f740e9d6dab60736d2d99b2cfa5342da80f7ed5a22c9236c)
|
|
22
22
|
}),
|
|
23
23
|
qo: Honk.G1Point({
|
|
24
|
-
x: uint256(
|
|
25
|
-
y: uint256(
|
|
24
|
+
x: uint256(0x1aefbc54dd417853702cdc27106d13a6f9b3bb7ab7384f438949934ce9843c76),
|
|
25
|
+
y: uint256(0x1f3b3f51541a29f12035776a9d2ccf07b2e0a0891a95ed3ff2cf7f2c57dc7323)
|
|
26
26
|
}),
|
|
27
27
|
q4: Honk.G1Point({
|
|
28
|
-
x: uint256(
|
|
29
|
-
y: uint256(
|
|
28
|
+
x: uint256(0x188e1c7cfa6ebe53dfab59fa057f5c6315995ed43c5b91637e31c5f0ab44334e),
|
|
29
|
+
y: uint256(0x0adde4d3b509c249dcb37cbb8bf2dd53393a9ddedc3ada8131e84bc53b4a29f5)
|
|
30
30
|
}),
|
|
31
31
|
qm: Honk.G1Point({
|
|
32
|
-
x: uint256(
|
|
33
|
-
y: uint256(
|
|
32
|
+
x: uint256(0x18c6087a838ade00055af96167c66ed82bd61083e95a5698d02761ffcf186778),
|
|
33
|
+
y: uint256(0x1fd017276fd7706340f47f878241ad75b974ec211dd6aebb5e5f7d40f4033859)
|
|
34
34
|
}),
|
|
35
35
|
qc: Honk.G1Point({
|
|
36
|
-
x: uint256(
|
|
37
|
-
y: uint256(
|
|
36
|
+
x: uint256(0x18228be8b71b6267946fbc462cca4088fd3c3b5befd50aab6de0140aee0292af),
|
|
37
|
+
y: uint256(0x1d5a8e23918e6f5930dedeeac9f3269683238877bceb9d3860fd3e2f52b56035)
|
|
38
38
|
}),
|
|
39
39
|
qLookup: Honk.G1Point({
|
|
40
|
-
x: uint256(
|
|
41
|
-
y: uint256(
|
|
40
|
+
x: uint256(0x0d5cd90aceba65851b2ed0af6db9a5d741f62886d05381d516916a3e1b72cbf6),
|
|
41
|
+
y: uint256(0x08207020e5d8f9360f392c108796ee1b6b58c6cd8a259a85ac8c76ac30fcac45)
|
|
42
42
|
}),
|
|
43
43
|
qArith: Honk.G1Point({
|
|
44
|
-
x: uint256(
|
|
45
|
-
y: uint256(
|
|
44
|
+
x: uint256(0x27b4841b6b4aa22edf2c98eda49a04ac953d6127eeff64ea5d1ef8beae3d6a50),
|
|
45
|
+
y: uint256(0x07356cdfd24d7f59c69ae104fa59f954a302635ba625738d6fae8fbc1d3ddbfa)
|
|
46
46
|
}),
|
|
47
47
|
qDeltaRange: Honk.G1Point({
|
|
48
|
-
x: uint256(
|
|
49
|
-
y: uint256(
|
|
48
|
+
x: uint256(0x1c119291fc3ce86c9ce2a0c8347508e1e04fb13e74f536addfe0d53844bdaaa2),
|
|
49
|
+
y: uint256(0x1c260b4b7cee1aae9f52e83829b2b3be9e100fa1a67bece4bab790cfb526ea3e)
|
|
50
50
|
}),
|
|
51
51
|
qElliptic: Honk.G1Point({
|
|
52
|
-
x: uint256(
|
|
53
|
-
y: uint256(
|
|
52
|
+
x: uint256(0x17fe8cdf110f8af822620031f2645657cfa813d1dbf1bbd6b9b2137836f26d8d),
|
|
53
|
+
y: uint256(0x13dc656b951ebda7907af6f461f99b181db140fced5bfe1a387a7cf17b28617a)
|
|
54
54
|
}),
|
|
55
55
|
qMemory: Honk.G1Point({
|
|
56
|
-
x: uint256(
|
|
57
|
-
y: uint256(
|
|
56
|
+
x: uint256(0x15c05b909cbeee858ccfacf06e010370bfdb32968a95df9198dca438b045e502),
|
|
57
|
+
y: uint256(0x03b87e8fb7ef51593fe5b0ba64f9b21b2210a738bada629f9ba8fe384de9eaf7)
|
|
58
58
|
}),
|
|
59
59
|
qNnf: Honk.G1Point({
|
|
60
|
-
x: uint256(
|
|
61
|
-
y: uint256(
|
|
60
|
+
x: uint256(0x00006983c28806afaf1f1a258a7c231734f11fd8647f5c2971d41d779f359bcb),
|
|
61
|
+
y: uint256(0x03f921f76c2cc4695d6ff07f92c0eea9b35cbb45da3766dee91d7497ffcb33a5)
|
|
62
62
|
}),
|
|
63
63
|
qPoseidon2External: Honk.G1Point({
|
|
64
|
-
x: uint256(
|
|
65
|
-
y: uint256(
|
|
64
|
+
x: uint256(0x2c989a2ec3d4c85362b7c455765374888cfd1388e5cce42103b640e1f30b082a),
|
|
65
|
+
y: uint256(0x15a122d1fe538855ec57fed6bffdbf17bfc8596b5bec698111b3b14c13efa801)
|
|
66
66
|
}),
|
|
67
67
|
qPoseidon2Internal: Honk.G1Point({
|
|
68
|
-
x: uint256(
|
|
69
|
-
y: uint256(
|
|
68
|
+
x: uint256(0x1f8532bb3e82f9722893a0912aa28d8cdeff200e140294782fc4a140ae8daa2a),
|
|
69
|
+
y: uint256(0x2dfba347dcfde136ba7af67c81bbde662154a025867020a539b2629e82e696e3)
|
|
70
70
|
}),
|
|
71
71
|
s1: Honk.G1Point({
|
|
72
|
-
x: uint256(
|
|
73
|
-
y: uint256(
|
|
72
|
+
x: uint256(0x2feeed83c247c4a15f4b38e5752a6063fa522cdd12f3cbff22f28af3c578f5be),
|
|
73
|
+
y: uint256(0x1fa005246305a8ce09021e77cfaedab8804398dd098a585613aa3b88a95c282d)
|
|
74
74
|
}),
|
|
75
75
|
s2: Honk.G1Point({
|
|
76
|
-
x: uint256(
|
|
77
|
-
y: uint256(
|
|
76
|
+
x: uint256(0x0583543b354291c8547657758a197df52ae28c99f8aa23ab94754578c91ee416),
|
|
77
|
+
y: uint256(0x1a2e10eb7fc5df171390a07148db02f6c50ab73b197ad7995321172cfbb2a1e2)
|
|
78
78
|
}),
|
|
79
79
|
s3: Honk.G1Point({
|
|
80
|
-
x: uint256(
|
|
81
|
-
y: uint256(
|
|
80
|
+
x: uint256(0x128686dedb77c7cb509be16f4444b4e6e6677d29d7688624e75b1942c21639b9),
|
|
81
|
+
y: uint256(0x2dd7e75919a9430b73f1afd7476d7e85b715561f4638d763be86eb9f6d414d0d)
|
|
82
82
|
}),
|
|
83
83
|
s4: Honk.G1Point({
|
|
84
|
-
x: uint256(
|
|
85
|
-
y: uint256(
|
|
84
|
+
x: uint256(0x3011371cf9af8da17a99bac9400dc8130d5c8e80bb049dc0f68a3dcd71e22db8),
|
|
85
|
+
y: uint256(0x0ef5ef63ff733810bb5f3d0b29bc709eb7ca91765c2115ef386e3bf9967199e8)
|
|
86
86
|
}),
|
|
87
87
|
t1: Honk.G1Point({
|
|
88
88
|
x: uint256(0x2194d92617bbb3ba3d9e53f4f13c5c7c6fc5ae0c56f06e0a35747f24625e5763),
|
|
@@ -101,28 +101,28 @@ library HonkVerificationKey {
|
|
|
101
101
|
y: uint256(0x283eb52c07506637e09fb73d7875ada840d8e4c75295a90dc312b4d2571c52c3)
|
|
102
102
|
}),
|
|
103
103
|
id1: Honk.G1Point({
|
|
104
|
-
x: uint256(
|
|
105
|
-
y: uint256(
|
|
104
|
+
x: uint256(0x10448f11a3ee571b99b76b75e5478f5b93329b5d09db94c3386aeca4ae60da7c),
|
|
105
|
+
y: uint256(0x18dfb2765543a9688d8594c9a38e12651fb0e295bb563c70d3d182acea1fb9ee)
|
|
106
106
|
}),
|
|
107
107
|
id2: Honk.G1Point({
|
|
108
|
-
x: uint256(
|
|
109
|
-
y: uint256(
|
|
108
|
+
x: uint256(0x0d9c20cd67c25d1cc52be765d9a6d1e6ebbef0b223663751f64b625478fc3f69),
|
|
109
|
+
y: uint256(0x005dd2bde3a26d831270b56a052455487206c7dde308b9174490b9d16464548d)
|
|
110
110
|
}),
|
|
111
111
|
id3: Honk.G1Point({
|
|
112
|
-
x: uint256(
|
|
113
|
-
y: uint256(
|
|
112
|
+
x: uint256(0x2f9836beaef073001c53cde434646295bbf40f36ebef0ff567b4a9ccfc5e0537),
|
|
113
|
+
y: uint256(0x0d212f43681e6ec1f75be9c9248255d9162123989da78b1d6796d9bf8327e350)
|
|
114
114
|
}),
|
|
115
115
|
id4: Honk.G1Point({
|
|
116
|
-
x: uint256(
|
|
117
|
-
y: uint256(
|
|
116
|
+
x: uint256(0x26a73f9cd40e4c9e9be3c882b8756e3da294e72da98bc21a2be3ae1382357257),
|
|
117
|
+
y: uint256(0x259cc202dc998d7ee2c13011de1e60e343deecdc2fa366de9802bd503661e4d5)
|
|
118
118
|
}),
|
|
119
119
|
lagrangeFirst: Honk.G1Point({
|
|
120
120
|
x: uint256(0x0000000000000000000000000000000000000000000000000000000000000001),
|
|
121
121
|
y: uint256(0x0000000000000000000000000000000000000000000000000000000000000002)
|
|
122
122
|
}),
|
|
123
123
|
lagrangeLast: Honk.G1Point({
|
|
124
|
-
x: uint256(
|
|
125
|
-
y: uint256(
|
|
124
|
+
x: uint256(0x274625a785b4433d3f7408db292a347f3517045493f185c0ccc07cfef5b652a8),
|
|
125
|
+
y: uint256(0x138082eaffbf47d522f5898d4445843724a51849296633009931f6da097a9607)
|
|
126
126
|
})
|
|
127
127
|
});
|
|
128
128
|
return vk;
|
|
@@ -299,7 +299,7 @@ uint256 constant NUMBER_OF_ENTITIES_ZK = NUMBER_OF_ENTITIES + NUM_MASKING_POLYNO
|
|
|
299
299
|
uint256 constant NUMBER_UNSHIFTED = 36;
|
|
300
300
|
uint256 constant NUMBER_UNSHIFTED_ZK = NUMBER_UNSHIFTED + NUM_MASKING_POLYNOMIALS;
|
|
301
301
|
uint256 constant NUMBER_TO_BE_SHIFTED = 5;
|
|
302
|
-
uint256 constant PAIRING_POINTS_SIZE =
|
|
302
|
+
uint256 constant PAIRING_POINTS_SIZE = 8;
|
|
303
303
|
|
|
304
304
|
uint256 constant FIELD_ELEMENT_SIZE = 0x20;
|
|
305
305
|
uint256 constant GROUP_ELEMENT_SIZE = 0x40;
|
|
@@ -1585,41 +1585,36 @@ function negateInplace(Honk.G1Point memory point) pure returns (Honk.G1Point mem
|
|
|
1585
1585
|
/**
|
|
1586
1586
|
* Convert the pairing points to G1 points.
|
|
1587
1587
|
*
|
|
1588
|
-
* The pairing points are serialised as an array of
|
|
1589
|
-
*
|
|
1588
|
+
* The pairing points are serialised as an array of 136-bit limbs representing two points
|
|
1589
|
+
* (P0 and P1, used for lhs and rhs of pairing operation).
|
|
1590
1590
|
*
|
|
1591
|
-
* There are
|
|
1591
|
+
* There are 2 limbs (lo, hi) for each coordinate, so 4 limbs per point, 8 total.
|
|
1592
|
+
* Layout: [P0.x_lo, P0.x_hi, P0.y_lo, P0.y_hi, P1.x_lo, P1.x_hi, P1.y_lo, P1.y_hi]
|
|
1592
1593
|
*
|
|
1593
1594
|
* @param pairingPoints The pairing points to convert.
|
|
1594
|
-
* @return lhs
|
|
1595
|
-
* @return rhs
|
|
1595
|
+
* @return lhs P0 point
|
|
1596
|
+
* @return rhs P1 point
|
|
1596
1597
|
*/
|
|
1597
1598
|
function convertPairingPointsToG1(Fr[PAIRING_POINTS_SIZE] memory pairingPoints)
|
|
1598
1599
|
pure
|
|
1599
1600
|
returns (Honk.G1Point memory lhs, Honk.G1Point memory rhs)
|
|
1600
1601
|
{
|
|
1602
|
+
// P0 (lhs): x = lo + hi << 136
|
|
1601
1603
|
uint256 lhsX = Fr.unwrap(pairingPoints[0]);
|
|
1602
|
-
lhsX |= Fr.unwrap(pairingPoints[1]) <<
|
|
1603
|
-
lhsX |= Fr.unwrap(pairingPoints[2]) << 136;
|
|
1604
|
-
lhsX |= Fr.unwrap(pairingPoints[3]) << 204;
|
|
1604
|
+
lhsX |= Fr.unwrap(pairingPoints[1]) << 136;
|
|
1605
1605
|
lhs.x = lhsX;
|
|
1606
1606
|
|
|
1607
|
-
uint256 lhsY = Fr.unwrap(pairingPoints[
|
|
1608
|
-
lhsY |= Fr.unwrap(pairingPoints[
|
|
1609
|
-
lhsY |= Fr.unwrap(pairingPoints[6]) << 136;
|
|
1610
|
-
lhsY |= Fr.unwrap(pairingPoints[7]) << 204;
|
|
1607
|
+
uint256 lhsY = Fr.unwrap(pairingPoints[2]);
|
|
1608
|
+
lhsY |= Fr.unwrap(pairingPoints[3]) << 136;
|
|
1611
1609
|
lhs.y = lhsY;
|
|
1612
1610
|
|
|
1613
|
-
|
|
1614
|
-
rhsX
|
|
1615
|
-
rhsX |= Fr.unwrap(pairingPoints[
|
|
1616
|
-
rhsX |= Fr.unwrap(pairingPoints[11]) << 204;
|
|
1611
|
+
// P1 (rhs): x = lo + hi << 136
|
|
1612
|
+
uint256 rhsX = Fr.unwrap(pairingPoints[4]);
|
|
1613
|
+
rhsX |= Fr.unwrap(pairingPoints[5]) << 136;
|
|
1617
1614
|
rhs.x = rhsX;
|
|
1618
1615
|
|
|
1619
|
-
uint256 rhsY = Fr.unwrap(pairingPoints[
|
|
1620
|
-
rhsY |= Fr.unwrap(pairingPoints[
|
|
1621
|
-
rhsY |= Fr.unwrap(pairingPoints[14]) << 136;
|
|
1622
|
-
rhsY |= Fr.unwrap(pairingPoints[15]) << 204;
|
|
1616
|
+
uint256 rhsY = Fr.unwrap(pairingPoints[6]);
|
|
1617
|
+
rhsY |= Fr.unwrap(pairingPoints[7]) << 136;
|
|
1623
1618
|
rhs.y = rhsY;
|
|
1624
1619
|
}
|
|
1625
1620
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"constructor","inputs":[{"name":"_asset","type":"address","internalType":"contract IMintableERC20"},{"name":"_annualPercentage","type":"uint256","internalType":"uint256"},{"name":"_owner","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMintableERC20"}],"stateMutability":"view"},{"type":"function","name":"DEPLOYMENT_TIME","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"NOMINAL_ANNUAL_PERCENTAGE_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptTokenOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cachedBudget","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"cachedBudgetYear","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mintAvailable","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BudgetReset","inputs":[{"name":"newYear","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"newBudget","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"CoinIssuer__InsufficientMintAvailable","inputs":[{"name":"available","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"CoinIssuer__InvalidConfiguration","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60e060405234801561000f575f5ffd5b5060405161091d38038061091d83398101604081905261002e916101dc565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100ee565b506001600160a01b03831660805260a08290524260c0525f60015561008861013d565b60028190556100aa57604051634fffd55f60e11b815260040160405180910390fd5b5f7ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2176002546040516100de91815260200190565b60405180910390a250505061027b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f670de0b6b3a764000060a0516080516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ac919061021c565b6101b69190610233565b6101c0919061025c565b905090565b6001600160a01b03811681146101d9575f5ffd5b50565b5f5f5f606084860312156101ee575f5ffd5b83516101f9816101c5565b602085015160408601519194509250610211816101c5565b809150509250925092565b5f6020828403121561022c575f5ffd5b5051919050565b808202811582820484141761025657634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8261027657634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c0516106566102c75f395f8181610177015261045a01525f818161012f015261049a01525f818160e8015281816101b60152818161029e01526104bb01526106565ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c806372c908bc1161006e57806372c908bc1461012a57806378acc00a146101515780638da5cb5b1461015a57806399f19cea1461016a578063e84721cb14610172578063f2fde38b14610199575f5ffd5b806319308f68146100aa57806338a5e016146100c657806340c10f19146100d05780634800d97f146100e3578063715018a614610122575b5f5ffd5b6100b360015481565b6040519081526020015b60405180910390f35b6100ce6101ac565b005b6100ce6100de36600461055e565b610224565b61010a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bd565b6100ce6102fa565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100b360025481565b5f546001600160a01b031661010a565b6100b361030d565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6100ce6101a7366004610586565b610338565b6101b4610375565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561020c575f5ffd5b505af115801561021e573d5f5f3e3d5ffd5b50505050565b61022c610375565b6102346103a1565b6002548082818111156102685760405163a1cc879960e01b8152600481019290925260248201526044015b60405180910390fd5b50610275905082826105ba565b6002556040516340c10f1960e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b1580156102df575f5ffd5b505af11580156102f1573d5f5f3e3d5ffd5b50505050505050565b610302610375565b61030b5f610400565b565b5f5f61031761044f565b9050806001541061032a57505060025490565b61033261048e565b91505090565b610340610375565b6001600160a01b03811661036957604051631e4fbdf760e01b81525f600482015260240161025f565b61037281610400565b50565b5f546001600160a01b0316331461030b5760405163118cdaa760e01b815233600482015260240161025f565b5f6103aa61044f565b90508060015410156103725760018190556103c361048e565b600281905560405190815281907ffb91318ed7011180131879440182ebbbabf3d0ccf88ccaab0a75cc28aa00c2179060200160405180910390a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6301e1338061047f7f0000000000000000000000000000000000000000000000000000000000000000426105ba565b61048991906105d3565b905090565b5f670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053991906105f2565b61047f9190610609565b80356001600160a01b0381168114610559575f5ffd5b919050565b5f5f6040838503121561056f575f5ffd5b61057883610543565b946020939093013593505050565b5f60208284031215610596575f5ffd5b61059f82610543565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105cd576105cd6105a6565b92915050565b5f826105ed57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610602575f5ffd5b5051919050565b80820281158282048414176105cd576105cd6105a656fea264697066735822122096c967904366126e4422bc2914c7480db4dd73ae74619fc52b824ef7fcd4e46e64736f6c634300081e0033","sourceMap":"2618:3303:125:-:0;;;2995:504;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3081:6;-1:-1:-1;;;;;1273:26:35;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:35;;1350:1;1322:31;;;872:51: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":{"90719":[{"start":232,"length":32},{"start":438,"length":32},{"start":670,"length":32},{"start":1211,"length":32}],"90721":[{"start":303,"length":32},{"start":1178,"length":32}],"90723":[{"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}
|