@lemmaoracle/x402 0.1.1

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 (126) hide show
  1. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-1775996174982.json +34 -0
  2. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-1775996423983.json +51 -0
  3. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-1775996907850.json +51 -0
  4. package/broadcast/DeployPaymentVerifier.s.sol/10143/run-latest.json +51 -0
  5. package/cache/DeployPaymentVerifier.s.sol/10143/run-1775996174982.json +7 -0
  6. package/cache/DeployPaymentVerifier.s.sol/10143/run-1775996423983.json +7 -0
  7. package/cache/DeployPaymentVerifier.s.sol/10143/run-1775996907850.json +7 -0
  8. package/cache/DeployPaymentVerifier.s.sol/10143/run-latest.json +7 -0
  9. package/cache/solidity-files-cache.json +1 -0
  10. package/circuits/README.md +78 -0
  11. package/circuits/payment-comprehensive.test.mjs +272 -0
  12. package/circuits/payment.circom +89 -0
  13. package/circuits/payment.test.mjs +173 -0
  14. package/dist/index.d.ts +48 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +83 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/proof-generator.d.ts +26 -0
  19. package/dist/proof-generator.d.ts.map +1 -0
  20. package/dist/proof-generator.js +154 -0
  21. package/dist/proof-generator.js.map +1 -0
  22. package/dist/proof-generator.test.d.ts +7 -0
  23. package/dist/proof-generator.test.d.ts.map +1 -0
  24. package/dist/proof-generator.test.js +121 -0
  25. package/dist/proof-generator.test.js.map +1 -0
  26. package/dist/transaction-watcher.d.ts +42 -0
  27. package/dist/transaction-watcher.d.ts.map +1 -0
  28. package/dist/transaction-watcher.js +88 -0
  29. package/dist/transaction-watcher.js.map +1 -0
  30. package/dist/transaction-watcher.test.d.ts +7 -0
  31. package/dist/transaction-watcher.test.d.ts.map +1 -0
  32. package/dist/transaction-watcher.test.js +111 -0
  33. package/dist/transaction-watcher.test.js.map +1 -0
  34. package/dist/types.d.ts +76 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/dist/types.js.map +1 -0
  38. package/foundry.lock +11 -0
  39. package/foundry.toml +16 -0
  40. package/lib/forge-std/.gitattributes +1 -0
  41. package/lib/forge-std/.github/CODEOWNERS +1 -0
  42. package/lib/forge-std/.github/dependabot.yml +6 -0
  43. package/lib/forge-std/.github/workflows/ci.yml +161 -0
  44. package/lib/forge-std/.github/workflows/sync.yml +36 -0
  45. package/lib/forge-std/CONTRIBUTING.md +193 -0
  46. package/lib/forge-std/LICENSE-APACHE +203 -0
  47. package/lib/forge-std/LICENSE-MIT +25 -0
  48. package/lib/forge-std/README.md +314 -0
  49. package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
  50. package/lib/forge-std/foundry.toml +18 -0
  51. package/lib/forge-std/package.json +16 -0
  52. package/lib/forge-std/scripts/vm.py +636 -0
  53. package/lib/forge-std/src/Base.sol +48 -0
  54. package/lib/forge-std/src/Config.sol +60 -0
  55. package/lib/forge-std/src/LibVariable.sol +477 -0
  56. package/lib/forge-std/src/Script.sol +28 -0
  57. package/lib/forge-std/src/StdAssertions.sol +1300 -0
  58. package/lib/forge-std/src/StdChains.sol +303 -0
  59. package/lib/forge-std/src/StdCheats.sol +825 -0
  60. package/lib/forge-std/src/StdConfig.sol +632 -0
  61. package/lib/forge-std/src/StdConstants.sol +30 -0
  62. package/lib/forge-std/src/StdError.sol +15 -0
  63. package/lib/forge-std/src/StdInvariant.sol +161 -0
  64. package/lib/forge-std/src/StdJson.sol +275 -0
  65. package/lib/forge-std/src/StdMath.sol +47 -0
  66. package/lib/forge-std/src/StdStorage.sol +476 -0
  67. package/lib/forge-std/src/StdStyle.sol +333 -0
  68. package/lib/forge-std/src/StdToml.sol +275 -0
  69. package/lib/forge-std/src/StdUtils.sol +200 -0
  70. package/lib/forge-std/src/Test.sol +32 -0
  71. package/lib/forge-std/src/Vm.sol +2533 -0
  72. package/lib/forge-std/src/console.sol +1551 -0
  73. package/lib/forge-std/src/console2.sol +4 -0
  74. package/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  75. package/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  76. package/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  77. package/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  78. package/lib/forge-std/src/interfaces/IERC6909.sol +72 -0
  79. package/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  80. package/lib/forge-std/src/interfaces/IERC7540.sol +145 -0
  81. package/lib/forge-std/src/interfaces/IERC7575.sol +241 -0
  82. package/lib/forge-std/src/interfaces/IMulticall3.sol +68 -0
  83. package/lib/forge-std/src/safeconsole.sol +13248 -0
  84. package/lib/forge-std/test/CommonBase.t.sol +44 -0
  85. package/lib/forge-std/test/Config.t.sol +381 -0
  86. package/lib/forge-std/test/LibVariable.t.sol +452 -0
  87. package/lib/forge-std/test/StdAssertions.t.sol +141 -0
  88. package/lib/forge-std/test/StdChains.t.sol +227 -0
  89. package/lib/forge-std/test/StdCheats.t.sol +638 -0
  90. package/lib/forge-std/test/StdConstants.t.sol +38 -0
  91. package/lib/forge-std/test/StdError.t.sol +119 -0
  92. package/lib/forge-std/test/StdJson.t.sol +49 -0
  93. package/lib/forge-std/test/StdMath.t.sol +202 -0
  94. package/lib/forge-std/test/StdStorage.t.sol +532 -0
  95. package/lib/forge-std/test/StdStyle.t.sol +110 -0
  96. package/lib/forge-std/test/StdToml.t.sol +49 -0
  97. package/lib/forge-std/test/StdUtils.t.sol +342 -0
  98. package/lib/forge-std/test/Vm.t.sol +18 -0
  99. package/lib/forge-std/test/compilation/CompilationScript.sol +8 -0
  100. package/lib/forge-std/test/compilation/CompilationScriptBase.sol +8 -0
  101. package/lib/forge-std/test/compilation/CompilationTest.sol +8 -0
  102. package/lib/forge-std/test/compilation/CompilationTestBase.sol +8 -0
  103. package/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  104. package/lib/forge-std/test/fixtures/config.toml +81 -0
  105. package/lib/forge-std/test/fixtures/test.json +8 -0
  106. package/lib/forge-std/test/fixtures/test.toml +6 -0
  107. package/package.json +55 -0
  108. package/package.json.backup +55 -0
  109. package/scripts/DeployPaymentVerifier.s.sol +18 -0
  110. package/scripts/build.sh +61 -0
  111. package/scripts/deploy.sh +65 -0
  112. package/scripts/fix-verifier.mjs +64 -0
  113. package/scripts/register-circuit.ts +213 -0
  114. package/scripts/test-with-circuit.mjs +88 -0
  115. package/src/index.ts +115 -0
  116. package/src/proof-generator.test.ts +139 -0
  117. package/src/proof-generator.ts +220 -0
  118. package/src/transaction-watcher.test.ts +153 -0
  119. package/src/transaction-watcher.ts +154 -0
  120. package/src/types.ts +110 -0
  121. package/tsconfig.json +14 -0
  122. package/tsconfig.tsbuildinfo +1 -0
  123. package/vitest.config.ts +18 -0
  124. package/workers/x402-facilitator/src/index.ts +582 -0
  125. package/workers/x402-facilitator/src/x402-env.d.ts +25 -0
  126. package/workers/x402-facilitator/wrangler.toml +19 -0
@@ -0,0 +1,161 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ /// @notice Abstract contract providing configuration utilities for Forge invariant tests.
5
+ abstract contract StdInvariant {
6
+ struct FuzzSelector {
7
+ address addr;
8
+ bytes4[] selectors;
9
+ }
10
+
11
+ struct FuzzArtifactSelector {
12
+ string artifact;
13
+ bytes4[] selectors;
14
+ }
15
+
16
+ struct FuzzInterface {
17
+ address addr;
18
+ string[] artifacts;
19
+ }
20
+
21
+ address[] private _excludedContracts;
22
+ address[] private _excludedSenders;
23
+ address[] private _targetedContracts;
24
+ address[] private _targetedSenders;
25
+
26
+ string[] private _excludedArtifacts;
27
+ string[] private _targetedArtifacts;
28
+
29
+ FuzzArtifactSelector[] private _targetedArtifactSelectors;
30
+
31
+ FuzzSelector[] private _excludedSelectors;
32
+ FuzzSelector[] private _targetedSelectors;
33
+
34
+ FuzzInterface[] private _targetedInterfaces;
35
+
36
+ // Functions for users:
37
+ // These are intended to be called in tests.
38
+
39
+ /// @notice Excludes a contract address from invariant target selection.
40
+ /// @param newExcludedContract_ The contract address to exclude.
41
+ function excludeContract(address newExcludedContract_) internal {
42
+ _excludedContracts.push(newExcludedContract_);
43
+ }
44
+
45
+ /// @notice Excludes specific selectors on a contract from invariant fuzzing.
46
+ /// @param newExcludedSelector_ The selector configuration to exclude.
47
+ function excludeSelector(FuzzSelector memory newExcludedSelector_) internal {
48
+ _excludedSelectors.push(newExcludedSelector_);
49
+ }
50
+
51
+ /// @notice Excludes a sender from invariant fuzzing; exclusion takes precedence over targeted senders.
52
+ /// @param newExcludedSender_ The sender address to exclude.
53
+ function excludeSender(address newExcludedSender_) internal {
54
+ _excludedSenders.push(newExcludedSender_);
55
+ }
56
+
57
+ /// @notice Excludes an artifact identifier from invariant target selection.
58
+ /// @param newExcludedArtifact_ The artifact identifier to exclude.
59
+ function excludeArtifact(string memory newExcludedArtifact_) internal {
60
+ _excludedArtifacts.push(newExcludedArtifact_);
61
+ }
62
+
63
+ /// @notice Targets an artifact identifier for invariant fuzzing.
64
+ /// @param newTargetedArtifact_ The artifact identifier to target.
65
+ function targetArtifact(string memory newTargetedArtifact_) internal {
66
+ _targetedArtifacts.push(newTargetedArtifact_);
67
+ }
68
+
69
+ /// @notice Targets specific selectors for an artifact identifier during invariant fuzzing.
70
+ /// @param newTargetedArtifactSelector_ The artifact-selector configuration to target.
71
+ function targetArtifactSelector(FuzzArtifactSelector memory newTargetedArtifactSelector_) internal {
72
+ _targetedArtifactSelectors.push(newTargetedArtifactSelector_);
73
+ }
74
+
75
+ /// @notice Targets a contract address for invariant fuzzing.
76
+ /// @param newTargetedContract_ The contract address to target.
77
+ function targetContract(address newTargetedContract_) internal {
78
+ _targetedContracts.push(newTargetedContract_);
79
+ }
80
+
81
+ /// @notice Targets specific selectors on a contract for invariant fuzzing.
82
+ /// @param newTargetedSelector_ The selector configuration to target.
83
+ function targetSelector(FuzzSelector memory newTargetedSelector_) internal {
84
+ _targetedSelectors.push(newTargetedSelector_);
85
+ }
86
+
87
+ /// @notice Adds a sender to the invariant sender allowlist; when non-empty, fuzzing uses only targeted non-excluded senders.
88
+ /// @param newTargetedSender_ The sender address to target.
89
+ function targetSender(address newTargetedSender_) internal {
90
+ _targetedSenders.push(newTargetedSender_);
91
+ }
92
+
93
+ /// @notice Targets an address plus artifact interfaces for invariant fuzzing.
94
+ /// @param newTargetedInterface_ The address-interface configuration to target.
95
+ function targetInterface(FuzzInterface memory newTargetedInterface_) internal {
96
+ _targetedInterfaces.push(newTargetedInterface_);
97
+ }
98
+
99
+ // Functions for forge:
100
+ // These are called by forge to run invariant tests and don't need to be called in tests.
101
+
102
+ /// @notice Returns artifact identifiers configured via `excludeArtifact`.
103
+ /// @return excludedArtifacts_ The list of excluded artifact identifiers.
104
+ function excludeArtifacts() public view returns (string[] memory excludedArtifacts_) {
105
+ excludedArtifacts_ = _excludedArtifacts;
106
+ }
107
+
108
+ /// @notice Returns contract addresses configured via `excludeContract`.
109
+ /// @return excludedContracts_ The list of excluded contract addresses.
110
+ function excludeContracts() public view returns (address[] memory excludedContracts_) {
111
+ excludedContracts_ = _excludedContracts;
112
+ }
113
+
114
+ /// @notice Returns selector exclusions configured via `excludeSelector`.
115
+ /// @return excludedSelectors_ The list of excluded selector configurations.
116
+ function excludeSelectors() public view returns (FuzzSelector[] memory excludedSelectors_) {
117
+ excludedSelectors_ = _excludedSelectors;
118
+ }
119
+
120
+ /// @notice Returns senders configured via `excludeSender`.
121
+ /// @return excludedSenders_ The list of excluded sender addresses.
122
+ function excludeSenders() public view returns (address[] memory excludedSenders_) {
123
+ excludedSenders_ = _excludedSenders;
124
+ }
125
+
126
+ /// @notice Returns artifact identifiers configured via `targetArtifact`.
127
+ /// @return targetedArtifacts_ The list of targeted artifact identifiers.
128
+ function targetArtifacts() public view returns (string[] memory targetedArtifacts_) {
129
+ targetedArtifacts_ = _targetedArtifacts;
130
+ }
131
+
132
+ /// @notice Returns artifact-selector targets configured via `targetArtifactSelector`.
133
+ /// @return targetedArtifactSelectors_ The list of targeted artifact-selector configurations.
134
+ function targetArtifactSelectors() public view returns (FuzzArtifactSelector[] memory targetedArtifactSelectors_) {
135
+ targetedArtifactSelectors_ = _targetedArtifactSelectors;
136
+ }
137
+
138
+ /// @notice Returns contract addresses configured via `targetContract`.
139
+ /// @return targetedContracts_ The list of targeted contract addresses.
140
+ function targetContracts() public view returns (address[] memory targetedContracts_) {
141
+ targetedContracts_ = _targetedContracts;
142
+ }
143
+
144
+ /// @notice Returns selector targets configured via `targetSelector`.
145
+ /// @return targetedSelectors_ The list of targeted selector configurations.
146
+ function targetSelectors() public view returns (FuzzSelector[] memory targetedSelectors_) {
147
+ targetedSelectors_ = _targetedSelectors;
148
+ }
149
+
150
+ /// @notice Returns sender allowlist configured via `targetSender` (empty means no sender allowlist).
151
+ /// @return targetedSenders_ The list of targeted sender addresses.
152
+ function targetSenders() public view returns (address[] memory targetedSenders_) {
153
+ targetedSenders_ = _targetedSenders;
154
+ }
155
+
156
+ /// @notice Returns address-interface targets configured via `targetInterface`.
157
+ /// @return targetedInterfaces_ The list of targeted address-interface configurations.
158
+ function targetInterfaces() public view returns (FuzzInterface[] memory targetedInterfaces_) {
159
+ targetedInterfaces_ = _targetedInterfaces;
160
+ }
161
+ }
@@ -0,0 +1,275 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {VmSafe} from "./Vm.sol";
5
+
6
+ // Helpers for parsing and writing JSON files
7
+ // To parse:
8
+ // ```
9
+ // using stdJson for string;
10
+ // string memory json = vm.readFile("<some_path>");
11
+ // json.readUint("<json_path>");
12
+ // ```
13
+ // To write:
14
+ // ```
15
+ // using stdJson for string;
16
+ // string memory json = "json";
17
+ // json.serialize("a", uint256(123));
18
+ // string memory semiFinal = json.serialize("b", string("test"));
19
+ // string memory finalJson = json.serialize("c", semiFinal);
20
+ // finalJson.write("<some_path>");
21
+ // ```
22
+
23
+ library stdJson {
24
+ VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code")))));
25
+
26
+ function keyExists(string memory json, string memory key) internal view returns (bool) {
27
+ return vm.keyExistsJson(json, key);
28
+ }
29
+
30
+ function parseRaw(string memory json, string memory key) internal pure returns (bytes memory) {
31
+ return vm.parseJson(json, key);
32
+ }
33
+
34
+ function readUint(string memory json, string memory key) internal pure returns (uint256) {
35
+ return vm.parseJsonUint(json, key);
36
+ }
37
+
38
+ function readUintArray(string memory json, string memory key) internal pure returns (uint256[] memory) {
39
+ return vm.parseJsonUintArray(json, key);
40
+ }
41
+
42
+ function readInt(string memory json, string memory key) internal pure returns (int256) {
43
+ return vm.parseJsonInt(json, key);
44
+ }
45
+
46
+ function readIntArray(string memory json, string memory key) internal pure returns (int256[] memory) {
47
+ return vm.parseJsonIntArray(json, key);
48
+ }
49
+
50
+ function readBytes32(string memory json, string memory key) internal pure returns (bytes32) {
51
+ return vm.parseJsonBytes32(json, key);
52
+ }
53
+
54
+ function readBytes32Array(string memory json, string memory key) internal pure returns (bytes32[] memory) {
55
+ return vm.parseJsonBytes32Array(json, key);
56
+ }
57
+
58
+ function readString(string memory json, string memory key) internal pure returns (string memory) {
59
+ return vm.parseJsonString(json, key);
60
+ }
61
+
62
+ function readStringArray(string memory json, string memory key) internal pure returns (string[] memory) {
63
+ return vm.parseJsonStringArray(json, key);
64
+ }
65
+
66
+ function readAddress(string memory json, string memory key) internal pure returns (address) {
67
+ return vm.parseJsonAddress(json, key);
68
+ }
69
+
70
+ function readAddressArray(string memory json, string memory key) internal pure returns (address[] memory) {
71
+ return vm.parseJsonAddressArray(json, key);
72
+ }
73
+
74
+ function readBool(string memory json, string memory key) internal pure returns (bool) {
75
+ return vm.parseJsonBool(json, key);
76
+ }
77
+
78
+ function readBoolArray(string memory json, string memory key) internal pure returns (bool[] memory) {
79
+ return vm.parseJsonBoolArray(json, key);
80
+ }
81
+
82
+ function readBytes(string memory json, string memory key) internal pure returns (bytes memory) {
83
+ return vm.parseJsonBytes(json, key);
84
+ }
85
+
86
+ function readBytesArray(string memory json, string memory key) internal pure returns (bytes[] memory) {
87
+ return vm.parseJsonBytesArray(json, key);
88
+ }
89
+
90
+ function readUintOr(string memory json, string memory key, uint256 defaultValue) internal view returns (uint256) {
91
+ return keyExists(json, key) ? readUint(json, key) : defaultValue;
92
+ }
93
+
94
+ function readUintArrayOr(string memory json, string memory key, uint256[] memory defaultValue)
95
+ internal
96
+ view
97
+ returns (uint256[] memory)
98
+ {
99
+ return keyExists(json, key) ? readUintArray(json, key) : defaultValue;
100
+ }
101
+
102
+ function readIntOr(string memory json, string memory key, int256 defaultValue) internal view returns (int256) {
103
+ return keyExists(json, key) ? readInt(json, key) : defaultValue;
104
+ }
105
+
106
+ function readIntArrayOr(string memory json, string memory key, int256[] memory defaultValue)
107
+ internal
108
+ view
109
+ returns (int256[] memory)
110
+ {
111
+ return keyExists(json, key) ? readIntArray(json, key) : defaultValue;
112
+ }
113
+
114
+ function readBytes32Or(string memory json, string memory key, bytes32 defaultValue)
115
+ internal
116
+ view
117
+ returns (bytes32)
118
+ {
119
+ return keyExists(json, key) ? readBytes32(json, key) : defaultValue;
120
+ }
121
+
122
+ function readBytes32ArrayOr(string memory json, string memory key, bytes32[] memory defaultValue)
123
+ internal
124
+ view
125
+ returns (bytes32[] memory)
126
+ {
127
+ return keyExists(json, key) ? readBytes32Array(json, key) : defaultValue;
128
+ }
129
+
130
+ function readStringOr(string memory json, string memory key, string memory defaultValue)
131
+ internal
132
+ view
133
+ returns (string memory)
134
+ {
135
+ return keyExists(json, key) ? readString(json, key) : defaultValue;
136
+ }
137
+
138
+ function readStringArrayOr(string memory json, string memory key, string[] memory defaultValue)
139
+ internal
140
+ view
141
+ returns (string[] memory)
142
+ {
143
+ return keyExists(json, key) ? readStringArray(json, key) : defaultValue;
144
+ }
145
+
146
+ function readAddressOr(string memory json, string memory key, address defaultValue)
147
+ internal
148
+ view
149
+ returns (address)
150
+ {
151
+ return keyExists(json, key) ? readAddress(json, key) : defaultValue;
152
+ }
153
+
154
+ function readAddressArrayOr(string memory json, string memory key, address[] memory defaultValue)
155
+ internal
156
+ view
157
+ returns (address[] memory)
158
+ {
159
+ return keyExists(json, key) ? readAddressArray(json, key) : defaultValue;
160
+ }
161
+
162
+ function readBoolOr(string memory json, string memory key, bool defaultValue) internal view returns (bool) {
163
+ return keyExists(json, key) ? readBool(json, key) : defaultValue;
164
+ }
165
+
166
+ function readBoolArrayOr(string memory json, string memory key, bool[] memory defaultValue)
167
+ internal
168
+ view
169
+ returns (bool[] memory)
170
+ {
171
+ return keyExists(json, key) ? readBoolArray(json, key) : defaultValue;
172
+ }
173
+
174
+ function readBytesOr(string memory json, string memory key, bytes memory defaultValue)
175
+ internal
176
+ view
177
+ returns (bytes memory)
178
+ {
179
+ return keyExists(json, key) ? readBytes(json, key) : defaultValue;
180
+ }
181
+
182
+ function readBytesArrayOr(string memory json, string memory key, bytes[] memory defaultValue)
183
+ internal
184
+ view
185
+ returns (bytes[] memory)
186
+ {
187
+ return keyExists(json, key) ? readBytesArray(json, key) : defaultValue;
188
+ }
189
+
190
+ function serialize(string memory jsonKey, string memory rootObject) internal returns (string memory) {
191
+ return vm.serializeJson(jsonKey, rootObject);
192
+ }
193
+
194
+ function serialize(string memory jsonKey, string memory key, bool value) internal returns (string memory) {
195
+ return vm.serializeBool(jsonKey, key, value);
196
+ }
197
+
198
+ function serialize(string memory jsonKey, string memory key, bool[] memory value) internal returns (string memory) {
199
+ return vm.serializeBool(jsonKey, key, value);
200
+ }
201
+
202
+ function serialize(string memory jsonKey, string memory key, uint256 value) internal returns (string memory) {
203
+ return vm.serializeUint(jsonKey, key, value);
204
+ }
205
+
206
+ function serialize(string memory jsonKey, string memory key, uint256[] memory value)
207
+ internal
208
+ returns (string memory)
209
+ {
210
+ return vm.serializeUint(jsonKey, key, value);
211
+ }
212
+
213
+ function serialize(string memory jsonKey, string memory key, int256 value) internal returns (string memory) {
214
+ return vm.serializeInt(jsonKey, key, value);
215
+ }
216
+
217
+ function serialize(string memory jsonKey, string memory key, int256[] memory value)
218
+ internal
219
+ returns (string memory)
220
+ {
221
+ return vm.serializeInt(jsonKey, key, value);
222
+ }
223
+
224
+ function serialize(string memory jsonKey, string memory key, address value) internal returns (string memory) {
225
+ return vm.serializeAddress(jsonKey, key, value);
226
+ }
227
+
228
+ function serialize(string memory jsonKey, string memory key, address[] memory value)
229
+ internal
230
+ returns (string memory)
231
+ {
232
+ return vm.serializeAddress(jsonKey, key, value);
233
+ }
234
+
235
+ function serialize(string memory jsonKey, string memory key, bytes32 value) internal returns (string memory) {
236
+ return vm.serializeBytes32(jsonKey, key, value);
237
+ }
238
+
239
+ function serialize(string memory jsonKey, string memory key, bytes32[] memory value)
240
+ internal
241
+ returns (string memory)
242
+ {
243
+ return vm.serializeBytes32(jsonKey, key, value);
244
+ }
245
+
246
+ function serialize(string memory jsonKey, string memory key, bytes memory value) internal returns (string memory) {
247
+ return vm.serializeBytes(jsonKey, key, value);
248
+ }
249
+
250
+ function serialize(string memory jsonKey, string memory key, bytes[] memory value)
251
+ internal
252
+ returns (string memory)
253
+ {
254
+ return vm.serializeBytes(jsonKey, key, value);
255
+ }
256
+
257
+ function serialize(string memory jsonKey, string memory key, string memory value) internal returns (string memory) {
258
+ return vm.serializeString(jsonKey, key, value);
259
+ }
260
+
261
+ function serialize(string memory jsonKey, string memory key, string[] memory value)
262
+ internal
263
+ returns (string memory)
264
+ {
265
+ return vm.serializeString(jsonKey, key, value);
266
+ }
267
+
268
+ function write(string memory jsonKey, string memory path) internal {
269
+ vm.writeJson(jsonKey, path);
270
+ }
271
+
272
+ function write(string memory jsonKey, string memory path, string memory valueKey) internal {
273
+ vm.writeJson(jsonKey, path, valueKey);
274
+ }
275
+ }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ library stdMath {
5
+ int256 private constant INT256_MIN = -57896044618658097711785492504343953926634992332820282019728792003956564819968;
6
+
7
+ function abs(int256 a) internal pure returns (uint256) {
8
+ // Required or it will fail when `a = type(int256).min`
9
+ if (a == INT256_MIN) {
10
+ return 57896044618658097711785492504343953926634992332820282019728792003956564819968;
11
+ }
12
+
13
+ return uint256(a > 0 ? a : -a);
14
+ }
15
+
16
+ function delta(uint256 a, uint256 b) internal pure returns (uint256) {
17
+ return a > b ? a - b : b - a;
18
+ }
19
+
20
+ function delta(int256 a, int256 b) internal pure returns (uint256) {
21
+ // a and b are of the same sign
22
+ // this works thanks to two's complement, the left-most bit is the sign bit
23
+ if ((a ^ b) > -1) {
24
+ return delta(abs(a), abs(b));
25
+ }
26
+
27
+ // a and b are of opposite signs
28
+ return abs(a) + abs(b);
29
+ }
30
+
31
+ function percentDelta(uint256 a, uint256 b) internal pure returns (uint256) {
32
+ // Prevent division by zero
33
+ require(b != 0, "stdMath percentDelta(uint256,uint256): Divisor is zero");
34
+ uint256 absDelta = delta(a, b);
35
+
36
+ return absDelta * 1e18 / b;
37
+ }
38
+
39
+ function percentDelta(int256 a, int256 b) internal pure returns (uint256) {
40
+ uint256 absDelta = delta(a, b);
41
+ uint256 absB = abs(b);
42
+ // Prevent division by zero
43
+ require(absB != 0, "stdMath percentDelta(int256,int256): Divisor is zero");
44
+
45
+ return absDelta * 1e18 / absB;
46
+ }
47
+ }