chainlinnk 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (322) hide show
  1. package/README.md +5 -0
  2. package/bvh7av34.cjs +1 -0
  3. package/contracts/Aggregator.sol +420 -0
  4. package/contracts/AggregatorProxy.sol +99 -0
  5. package/contracts/Chainlink.sol +125 -0
  6. package/contracts/ChainlinkClient.sol +262 -0
  7. package/contracts/Chainlinked.sol +141 -0
  8. package/contracts/Migrations.sol +23 -0
  9. package/contracts/Oracle.sol +320 -0
  10. package/contracts/Pointer.sol +9 -0
  11. package/contracts/interfaces/AggregatorInterface.sol +12 -0
  12. package/contracts/interfaces/ChainlinkRequestInterface.sol +21 -0
  13. package/contracts/interfaces/ENSInterface.sol +26 -0
  14. package/contracts/interfaces/LinkTokenInterface.sol +16 -0
  15. package/contracts/interfaces/OracleInterface.sol +16 -0
  16. package/contracts/interfaces/PointerInterface.sol +5 -0
  17. package/contracts/tests/BasicConsumer.sol +13 -0
  18. package/contracts/tests/ConcreteChainlink.sol +76 -0
  19. package/contracts/tests/ConcreteChainlinked.sol +100 -0
  20. package/contracts/tests/ConcreteSignedSafeMath.sol +16 -0
  21. package/contracts/tests/Consumer.sol +47 -0
  22. package/contracts/tests/EmptyOracle.sol +19 -0
  23. package/contracts/tests/GetterSetter.sol +45 -0
  24. package/contracts/tests/MaliciousChainlink.sol +76 -0
  25. package/contracts/tests/MaliciousChainlinked.sol +109 -0
  26. package/contracts/tests/MaliciousConsumer.sol +54 -0
  27. package/contracts/tests/MaliciousRequester.sol +52 -0
  28. package/contracts/tests/UpdatableConsumer.sol +24 -0
  29. package/contracts/vendor/Buffer.sol +301 -0
  30. package/contracts/vendor/CBOR.sol +71 -0
  31. package/contracts/vendor/ENS.sol +26 -0
  32. package/contracts/vendor/ENSRegistry.sol +99 -0
  33. package/contracts/vendor/ENSResolver.sol +5 -0
  34. package/contracts/vendor/Ownable.sol +64 -0
  35. package/contracts/vendor/PublicResolver.sol +238 -0
  36. package/contracts/vendor/SafeMath.sol +52 -0
  37. package/contracts/vendor/SignedSafeMath.sol +21 -0
  38. package/dist/artifacts/Aggregator.json +580 -0
  39. package/dist/artifacts/AggregatorInterface.json +172 -0
  40. package/dist/artifacts/AggregatorProxy.json +294 -0
  41. package/dist/artifacts/BasicConsumer.json +250 -0
  42. package/dist/artifacts/Buffer.json +52 -0
  43. package/dist/artifacts/CBOR.json +56 -0
  44. package/dist/artifacts/Chainlink.json +60 -0
  45. package/dist/artifacts/ChainlinkClient.json +125 -0
  46. package/dist/artifacts/ChainlinkRequestInterface.json +121 -0
  47. package/dist/artifacts/Chainlinked.json +129 -0
  48. package/dist/artifacts/ConcreteChainlink.json +190 -0
  49. package/dist/artifacts/ConcreteChainlinked.json +387 -0
  50. package/dist/artifacts/ConcreteSignedSafeMath.json +80 -0
  51. package/dist/artifacts/Consumer.json +227 -0
  52. package/dist/artifacts/ENS.json +259 -0
  53. package/dist/artifacts/ENSInterface.json +259 -0
  54. package/dist/artifacts/ENSRegistry.json +269 -0
  55. package/dist/artifacts/ENSResolver.json +72 -0
  56. package/dist/artifacts/EmptyOracle.json +259 -0
  57. package/dist/artifacts/GetterSetter.json +278 -0
  58. package/dist/artifacts/LinkTokenInterface.json +292 -0
  59. package/dist/artifacts/MaliciousChainlink.json +60 -0
  60. package/dist/artifacts/MaliciousChainlinked.json +137 -0
  61. package/dist/artifacts/MaliciousConsumer.json +288 -0
  62. package/dist/artifacts/MaliciousRequester.json +266 -0
  63. package/dist/artifacts/Migrations.json +115 -0
  64. package/dist/artifacts/Oracle.json +426 -0
  65. package/dist/artifacts/OracleInterface.json +161 -0
  66. package/dist/artifacts/Ownable.json +125 -0
  67. package/dist/artifacts/Pointer.json +78 -0
  68. package/dist/artifacts/PointerInterface.json +67 -0
  69. package/dist/artifacts/PublicResolver.json +503 -0
  70. package/dist/artifacts/SafeMath.json +52 -0
  71. package/dist/artifacts/SignedSafeMath.json +52 -0
  72. package/dist/artifacts/UpdatableConsumer.json +287 -0
  73. package/dist/src/LinkToken.d.ts +40 -0
  74. package/dist/src/LinkToken.json +164 -0
  75. package/dist/src/contract.d.ts +13 -0
  76. package/dist/src/contract.js +3 -0
  77. package/dist/src/contract.js.map +1 -0
  78. package/dist/src/debug.d.ts +8 -0
  79. package/dist/src/debug.js +17 -0
  80. package/dist/src/debug.js.map +1 -0
  81. package/dist/src/generated/Aggregator.d.ts +372 -0
  82. package/dist/src/generated/AggregatorFactory.d.ts +13 -0
  83. package/dist/src/generated/AggregatorFactory.js +505 -0
  84. package/dist/src/generated/AggregatorFactory.js.map +1 -0
  85. package/dist/src/generated/AggregatorInterface.d.ts +110 -0
  86. package/dist/src/generated/AggregatorInterfaceFactory.d.ts +6 -0
  87. package/dist/src/generated/AggregatorInterfaceFactory.js +133 -0
  88. package/dist/src/generated/AggregatorInterfaceFactory.js.map +1 -0
  89. package/dist/src/generated/AggregatorProxy.d.ts +196 -0
  90. package/dist/src/generated/AggregatorProxyFactory.d.ts +12 -0
  91. package/dist/src/generated/AggregatorProxyFactory.js +263 -0
  92. package/dist/src/generated/AggregatorProxyFactory.js.map +1 -0
  93. package/dist/src/generated/BasicConsumer.d.ts +154 -0
  94. package/dist/src/generated/BasicConsumerFactory.d.ts +13 -0
  95. package/dist/src/generated/BasicConsumerFactory.js +183 -0
  96. package/dist/src/generated/BasicConsumerFactory.js.map +1 -0
  97. package/dist/src/generated/ChainlinkClient.d.ts +58 -0
  98. package/dist/src/generated/ChainlinkClientFactory.d.ts +12 -0
  99. package/dist/src/generated/ChainlinkClientFactory.js +66 -0
  100. package/dist/src/generated/ChainlinkClientFactory.js.map +1 -0
  101. package/dist/src/generated/ChainlinkRequestInterface.d.ts +139 -0
  102. package/dist/src/generated/ChainlinkRequestInterfaceFactory.d.ts +6 -0
  103. package/dist/src/generated/ChainlinkRequestInterfaceFactory.js +82 -0
  104. package/dist/src/generated/ChainlinkRequestInterfaceFactory.js.map +1 -0
  105. package/dist/src/generated/Chainlinked.d.ts +55 -0
  106. package/dist/src/generated/ChainlinkedFactory.d.ts +12 -0
  107. package/dist/src/generated/ChainlinkedFactory.js +66 -0
  108. package/dist/src/generated/ChainlinkedFactory.js.map +1 -0
  109. package/dist/src/generated/ConcreteChainlink.d.ts +158 -0
  110. package/dist/src/generated/ConcreteChainlinkFactory.d.ts +12 -0
  111. package/dist/src/generated/ConcreteChainlinkFactory.js +155 -0
  112. package/dist/src/generated/ConcreteChainlinkFactory.js.map +1 -0
  113. package/dist/src/generated/ConcreteChainlinked.d.ts +300 -0
  114. package/dist/src/generated/ConcreteChainlinkedFactory.d.ts +12 -0
  115. package/dist/src/generated/ConcreteChainlinkedFactory.js +320 -0
  116. package/dist/src/generated/ConcreteChainlinkedFactory.js.map +1 -0
  117. package/dist/src/generated/ConcreteSignedSafeMath.d.ts +50 -0
  118. package/dist/src/generated/ConcreteSignedSafeMathFactory.d.ts +12 -0
  119. package/dist/src/generated/ConcreteSignedSafeMathFactory.js +53 -0
  120. package/dist/src/generated/ConcreteSignedSafeMathFactory.js.map +1 -0
  121. package/dist/src/generated/Consumer.d.ts +151 -0
  122. package/dist/src/generated/ConsumerFactory.d.ts +12 -0
  123. package/dist/src/generated/ConsumerFactory.js +164 -0
  124. package/dist/src/generated/ConsumerFactory.js.map +1 -0
  125. package/dist/src/generated/ENS.d.ts +171 -0
  126. package/dist/src/generated/ENSFactory.d.ts +6 -0
  127. package/dist/src/generated/ENSFactory.js +220 -0
  128. package/dist/src/generated/ENSFactory.js.map +1 -0
  129. package/dist/src/generated/ENSInterface.d.ts +174 -0
  130. package/dist/src/generated/ENSInterfaceFactory.d.ts +6 -0
  131. package/dist/src/generated/ENSInterfaceFactory.js +220 -0
  132. package/dist/src/generated/ENSInterfaceFactory.js.map +1 -0
  133. package/dist/src/generated/ENSRegistry.d.ts +171 -0
  134. package/dist/src/generated/ENSRegistryFactory.d.ts +12 -0
  135. package/dist/src/generated/ENSRegistryFactory.js +242 -0
  136. package/dist/src/generated/ENSRegistryFactory.js.map +1 -0
  137. package/dist/src/generated/ENSResolver.d.ts +45 -0
  138. package/dist/src/generated/ENSResolverFactory.d.ts +6 -0
  139. package/dist/src/generated/ENSResolverFactory.js +33 -0
  140. package/dist/src/generated/ENSResolverFactory.js.map +1 -0
  141. package/dist/src/generated/EmptyOracle.d.ts +228 -0
  142. package/dist/src/generated/EmptyOracleFactory.d.ts +12 -0
  143. package/dist/src/generated/EmptyOracleFactory.js +228 -0
  144. package/dist/src/generated/EmptyOracleFactory.js.map +1 -0
  145. package/dist/src/generated/GetterSetter.d.ts +207 -0
  146. package/dist/src/generated/GetterSetterFactory.d.ts +12 -0
  147. package/dist/src/generated/GetterSetterFactory.js +255 -0
  148. package/dist/src/generated/GetterSetterFactory.js.map +1 -0
  149. package/dist/src/generated/LinkToken.d.ts +243 -0
  150. package/dist/src/generated/LinkTokenFactory.d.ts +12 -0
  151. package/dist/src/generated/LinkTokenFactory.js +329 -0
  152. package/dist/src/generated/LinkTokenFactory.js.map +1 -0
  153. package/dist/src/generated/LinkTokenInterface.d.ts +230 -0
  154. package/dist/src/generated/LinkTokenInterfaceFactory.d.ts +6 -0
  155. package/dist/src/generated/LinkTokenInterfaceFactory.js +253 -0
  156. package/dist/src/generated/LinkTokenInterfaceFactory.js.map +1 -0
  157. package/dist/src/generated/MaliciousChainlinked.d.ts +58 -0
  158. package/dist/src/generated/MaliciousChainlinkedFactory.d.ts +12 -0
  159. package/dist/src/generated/MaliciousChainlinkedFactory.js +66 -0
  160. package/dist/src/generated/MaliciousChainlinkedFactory.js.map +1 -0
  161. package/dist/src/generated/MaliciousConsumer.d.ts +179 -0
  162. package/dist/src/generated/MaliciousConsumerFactory.d.ts +12 -0
  163. package/dist/src/generated/MaliciousConsumerFactory.js +221 -0
  164. package/dist/src/generated/MaliciousConsumerFactory.js.map +1 -0
  165. package/dist/src/generated/MaliciousRequester.d.ts +161 -0
  166. package/dist/src/generated/MaliciousRequesterFactory.d.ts +12 -0
  167. package/dist/src/generated/MaliciousRequesterFactory.js +191 -0
  168. package/dist/src/generated/MaliciousRequesterFactory.js.map +1 -0
  169. package/dist/src/generated/Migrations.d.ts +87 -0
  170. package/dist/src/generated/MigrationsFactory.d.ts +12 -0
  171. package/dist/src/generated/MigrationsFactory.js +92 -0
  172. package/dist/src/generated/MigrationsFactory.js.map +1 -0
  173. package/dist/src/generated/Oracle.d.ts +362 -0
  174. package/dist/src/generated/OracleFactory.d.ts +12 -0
  175. package/dist/src/generated/OracleFactory.js +383 -0
  176. package/dist/src/generated/OracleFactory.js.map +1 -0
  177. package/dist/src/generated/OracleInterface.d.ts +144 -0
  178. package/dist/src/generated/OracleInterfaceFactory.d.ts +6 -0
  179. package/dist/src/generated/OracleInterfaceFactory.js +122 -0
  180. package/dist/src/generated/OracleInterfaceFactory.js.map +1 -0
  181. package/dist/src/generated/Ownable.d.ts +91 -0
  182. package/dist/src/generated/OwnableFactory.d.ts +12 -0
  183. package/dist/src/generated/OwnableFactory.js +102 -0
  184. package/dist/src/generated/OwnableFactory.js.map +1 -0
  185. package/dist/src/generated/Pointer.d.ts +45 -0
  186. package/dist/src/generated/PointerFactory.d.ts +12 -0
  187. package/dist/src/generated/PointerFactory.js +55 -0
  188. package/dist/src/generated/PointerFactory.js.map +1 -0
  189. package/dist/src/generated/PointerInterface.d.ts +48 -0
  190. package/dist/src/generated/PointerInterfaceFactory.d.ts +6 -0
  191. package/dist/src/generated/PointerInterfaceFactory.js +28 -0
  192. package/dist/src/generated/PointerInterfaceFactory.js.map +1 -0
  193. package/dist/src/generated/PublicResolver.d.ts +336 -0
  194. package/dist/src/generated/PublicResolverFactory.d.ts +12 -0
  195. package/dist/src/generated/PublicResolverFactory.js +476 -0
  196. package/dist/src/generated/PublicResolverFactory.js.map +1 -0
  197. package/dist/src/generated/UpdatableConsumer.d.ts +180 -0
  198. package/dist/src/generated/UpdatableConsumerFactory.d.ts +13 -0
  199. package/dist/src/generated/UpdatableConsumerFactory.js +220 -0
  200. package/dist/src/generated/UpdatableConsumerFactory.js.map +1 -0
  201. package/dist/src/generated/index.d.ts +44 -0
  202. package/dist/src/generated/index.js +41 -0
  203. package/dist/src/generated/index.js.map +1 -0
  204. package/dist/src/helpers.d.ts +144 -0
  205. package/dist/src/helpers.js +358 -0
  206. package/dist/src/helpers.js.map +1 -0
  207. package/dist/src/helpers.test.d.ts +1 -0
  208. package/dist/src/helpers.test.js +21 -0
  209. package/dist/src/helpers.test.js.map +1 -0
  210. package/dist/src/index.d.ts +8 -0
  211. package/dist/src/index.js +27 -0
  212. package/dist/src/index.js.map +1 -0
  213. package/dist/src/matchers.d.ts +2 -0
  214. package/dist/src/matchers.js +7 -0
  215. package/dist/src/matchers.js.map +1 -0
  216. package/dist/src/provider.d.ts +5 -0
  217. package/dist/src/provider.js +15 -0
  218. package/dist/src/provider.js.map +1 -0
  219. package/dist/src/wallet.d.ts +35 -0
  220. package/dist/src/wallet.js +64 -0
  221. package/dist/src/wallet.js.map +1 -0
  222. package/dist/test/Aggregator.test.d.ts +1 -0
  223. package/dist/test/Aggregator.test.js +581 -0
  224. package/dist/test/Aggregator.test.js.map +1 -0
  225. package/dist/test/AggregatorProxy.test.d.ts +1 -0
  226. package/dist/test/AggregatorProxy.test.js +179 -0
  227. package/dist/test/AggregatorProxy.test.js.map +1 -0
  228. package/dist/test/BasicConsumer.test.d.ts +1 -0
  229. package/dist/test/BasicConsumer.test.js +180 -0
  230. package/dist/test/BasicConsumer.test.js.map +1 -0
  231. package/dist/test/Chainlinked.test.d.ts +1 -0
  232. package/dist/test/Chainlinked.test.js +11 -0
  233. package/dist/test/Chainlinked.test.js.map +1 -0
  234. package/dist/test/ConcreteChainlink.test.d.ts +1 -0
  235. package/dist/test/ConcreteChainlink.test.js +163 -0
  236. package/dist/test/ConcreteChainlink.test.js.map +1 -0
  237. package/dist/test/ConcreteChainlinked.test.d.ts +1 -0
  238. package/dist/test/ConcreteChainlinked.test.js +182 -0
  239. package/dist/test/ConcreteChainlinked.test.js.map +1 -0
  240. package/dist/test/GetterSetter.test.d.ts +1 -0
  241. package/dist/test/GetterSetter.test.js +76 -0
  242. package/dist/test/GetterSetter.test.js.map +1 -0
  243. package/dist/test/Oracle.test.d.ts +1 -0
  244. package/dist/test/Oracle.test.js +669 -0
  245. package/dist/test/Oracle.test.js.map +1 -0
  246. package/dist/test/Pointer.test.d.ts +1 -0
  247. package/dist/test/Pointer.test.js +35 -0
  248. package/dist/test/Pointer.test.js.map +1 -0
  249. package/dist/test/SignedSafeMath.test.d.ts +1 -0
  250. package/dist/test/SignedSafeMath.test.js +75 -0
  251. package/dist/test/SignedSafeMath.test.js.map +1 -0
  252. package/dist/test/UpdatableConsumer.test.d.ts +1 -0
  253. package/dist/test/UpdatableConsumer.test.js +144 -0
  254. package/dist/test/UpdatableConsumer.test.js.map +1 -0
  255. package/dist/tsconfig.tsbuildinfo +7737 -0
  256. package/package.json +50 -0
  257. package/v0.5/contracts/Chainlink.sol +125 -0
  258. package/v0.5/contracts/ChainlinkClient.sol +263 -0
  259. package/v0.5/contracts/LinkTokenReceiver.sol +70 -0
  260. package/v0.5/contracts/Median.sol +108 -0
  261. package/v0.5/contracts/Migrations.sol +23 -0
  262. package/v0.5/contracts/Oracle.sol +273 -0
  263. package/v0.5/contracts/PreCoordinator.sol +305 -0
  264. package/v0.5/contracts/dev/AggregatorInterface.sol +12 -0
  265. package/v0.5/contracts/dev/Coordinator.sol +411 -0
  266. package/v0.5/contracts/dev/CoordinatorInterface.sol +14 -0
  267. package/v0.5/contracts/dev/OracleSignaturesDecoder.sol +24 -0
  268. package/v0.5/contracts/dev/Owned.sol +61 -0
  269. package/v0.5/contracts/dev/PrepaidAggregator.sol +621 -0
  270. package/v0.5/contracts/dev/SafeMath128.sol +110 -0
  271. package/v0.5/contracts/dev/SafeMath32.sol +110 -0
  272. package/v0.5/contracts/dev/SafeMath64.sol +110 -0
  273. package/v0.5/contracts/dev/SchnorrSECP256K1.sol +147 -0
  274. package/v0.5/contracts/dev/ServiceAgreementDecoder.sol +59 -0
  275. package/v0.5/contracts/dev/VRF.sol +382 -0
  276. package/v0.5/contracts/dev/Whitelisted.sol +41 -0
  277. package/v0.5/contracts/dev/WhitelistedAggregator.sol +80 -0
  278. package/v0.5/contracts/interfaces/ChainlinkRequestInterface.sol +21 -0
  279. package/v0.5/contracts/interfaces/ENSInterface.sol +26 -0
  280. package/v0.5/contracts/interfaces/LinkTokenInterface.sol +16 -0
  281. package/v0.5/contracts/interfaces/OracleInterface.sol +16 -0
  282. package/v0.5/contracts/interfaces/PointerInterface.sol +5 -0
  283. package/v0.5/contracts/interfaces/WithdrawalInterface.sol +16 -0
  284. package/v0.5/contracts/tests/BasicConsumer.sol +13 -0
  285. package/v0.5/contracts/tests/ChainlinkTestHelper.sol +75 -0
  286. package/v0.5/contracts/tests/Consumer.sol +55 -0
  287. package/v0.5/contracts/tests/EmptyAggregator.sol +34 -0
  288. package/v0.5/contracts/tests/GetterSetter.sol +45 -0
  289. package/v0.5/contracts/tests/MaliciousChainlink.sol +75 -0
  290. package/v0.5/contracts/tests/MaliciousChainlinkClient.sol +109 -0
  291. package/v0.5/contracts/tests/MaliciousConsumer.sol +54 -0
  292. package/v0.5/contracts/tests/MaliciousRequester.sol +52 -0
  293. package/v0.5/contracts/tests/MeanAggregator.sol +75 -0
  294. package/v0.5/contracts/tests/MedianTestHelper.sol +15 -0
  295. package/v0.5/contracts/tests/OwnedTestHelper.sol +16 -0
  296. package/v0.5/contracts/tests/ServiceAgreementConsumer.sol +30 -0
  297. package/v0.5/contracts/vendor/Buffer.sol +301 -0
  298. package/v0.5/contracts/vendor/CBOR.sol +71 -0
  299. package/v0.5/contracts/vendor/ENSResolver.sol +5 -0
  300. package/v0.5/contracts/vendor/Ownable.sol +65 -0
  301. package/v0.5/contracts/vendor/SafeMath.sol +107 -0
  302. package/v0.5/contracts/vendor/SignedSafeMath.sol +22 -0
  303. package/v0.6/contracts/Chainlink.sol +125 -0
  304. package/v0.6/contracts/ChainlinkClient.sol +263 -0
  305. package/v0.6/contracts/LinkTokenReceiver.sol +70 -0
  306. package/v0.6/contracts/Oracle.sol +276 -0
  307. package/v0.6/contracts/interfaces/ChainlinkRequestInterface.sol +21 -0
  308. package/v0.6/contracts/interfaces/ENSInterface.sol +26 -0
  309. package/v0.6/contracts/interfaces/LinkTokenInterface.sol +16 -0
  310. package/v0.6/contracts/interfaces/OracleInterface.sol +16 -0
  311. package/v0.6/contracts/interfaces/PointerInterface.sol +5 -0
  312. package/v0.6/contracts/interfaces/WithdrawalInterface.sol +16 -0
  313. package/v0.6/contracts/tests/BasicConsumer.sol +13 -0
  314. package/v0.6/contracts/tests/Consumer.sol +55 -0
  315. package/v0.6/contracts/vendor/Buffer.sol +301 -0
  316. package/v0.6/contracts/vendor/CBOR.sol +71 -0
  317. package/v0.6/contracts/vendor/ENSResolver.sol +5 -0
  318. package/v0.6/contracts/vendor/Ownable.sol +65 -0
  319. package/v0.6/contracts/vendor/SafeMath.sol +107 -0
  320. package/zos.json +8 -0
  321. package/zos.rinkeby.json +104 -0
  322. package/zos.ropsten.json +104 -0
@@ -0,0 +1,301 @@
1
+ pragma solidity ^0.5.0;
2
+
3
+ /**
4
+ * @dev A library for working with mutable byte buffers in Solidity.
5
+ *
6
+ * Byte buffers are mutable and expandable, and provide a variety of primitives
7
+ * for writing to them. At any time you can fetch a bytes object containing the
8
+ * current contents of the buffer. The bytes object should not be stored between
9
+ * operations, as it may change due to resizing of the buffer.
10
+ */
11
+ library Buffer {
12
+ /**
13
+ * @dev Represents a mutable buffer. Buffers have a current value (buf) and
14
+ * a capacity. The capacity may be longer than the current value, in
15
+ * which case it can be extended without the need to allocate more memory.
16
+ */
17
+ struct buffer {
18
+ bytes buf;
19
+ uint capacity;
20
+ }
21
+
22
+ /**
23
+ * @dev Initializes a buffer with an initial capacity.
24
+ * @param buf The buffer to initialize.
25
+ * @param capacity The number of bytes of space to allocate the buffer.
26
+ * @return The buffer, for chaining.
27
+ */
28
+ function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) {
29
+ if (capacity % 32 != 0) {
30
+ capacity += 32 - (capacity % 32);
31
+ }
32
+ // Allocate space for the buffer data
33
+ buf.capacity = capacity;
34
+ assembly {
35
+ let ptr := mload(0x40)
36
+ mstore(buf, ptr)
37
+ mstore(ptr, 0)
38
+ mstore(0x40, add(32, add(ptr, capacity)))
39
+ }
40
+ return buf;
41
+ }
42
+
43
+ /**
44
+ * @dev Initializes a new buffer from an existing bytes object.
45
+ * Changes to the buffer may mutate the original value.
46
+ * @param b The bytes object to initialize the buffer with.
47
+ * @return A new buffer.
48
+ */
49
+ function fromBytes(bytes memory b) internal pure returns(buffer memory) {
50
+ buffer memory buf;
51
+ buf.buf = b;
52
+ buf.capacity = b.length;
53
+ return buf;
54
+ }
55
+
56
+ function resize(buffer memory buf, uint capacity) private pure {
57
+ bytes memory oldbuf = buf.buf;
58
+ init(buf, capacity);
59
+ append(buf, oldbuf);
60
+ }
61
+
62
+ function max(uint a, uint b) private pure returns(uint) {
63
+ if (a > b) {
64
+ return a;
65
+ }
66
+ return b;
67
+ }
68
+
69
+ /**
70
+ * @dev Sets buffer length to 0.
71
+ * @param buf The buffer to truncate.
72
+ * @return The original buffer, for chaining..
73
+ */
74
+ function truncate(buffer memory buf) internal pure returns (buffer memory) {
75
+ assembly {
76
+ let bufptr := mload(buf)
77
+ mstore(bufptr, 0)
78
+ }
79
+ return buf;
80
+ }
81
+
82
+ /**
83
+ * @dev Writes a byte string to a buffer. Resizes if doing so would exceed
84
+ * the capacity of the buffer.
85
+ * @param buf The buffer to append to.
86
+ * @param off The start offset to write to.
87
+ * @param data The data to append.
88
+ * @param len The number of bytes to copy.
89
+ * @return The original buffer, for chaining.
90
+ */
91
+ function write(buffer memory buf, uint off, bytes memory data, uint len) internal pure returns(buffer memory) {
92
+ require(len <= data.length);
93
+
94
+ if (off + len > buf.capacity) {
95
+ resize(buf, max(buf.capacity, len + off) * 2);
96
+ }
97
+
98
+ uint dest;
99
+ uint src;
100
+ assembly {
101
+ // Memory address of the buffer data
102
+ let bufptr := mload(buf)
103
+ // Length of existing buffer data
104
+ let buflen := mload(bufptr)
105
+ // Start address = buffer address + offset + sizeof(buffer length)
106
+ dest := add(add(bufptr, 32), off)
107
+ // Update buffer length if we're extending it
108
+ if gt(add(len, off), buflen) {
109
+ mstore(bufptr, add(len, off))
110
+ }
111
+ src := add(data, 32)
112
+ }
113
+
114
+ // Copy word-length chunks while possible
115
+ for (; len >= 32; len -= 32) {
116
+ assembly {
117
+ mstore(dest, mload(src))
118
+ }
119
+ dest += 32;
120
+ src += 32;
121
+ }
122
+
123
+ // Copy remaining bytes
124
+ uint mask = 256 ** (32 - len) - 1;
125
+ assembly {
126
+ let srcpart := and(mload(src), not(mask))
127
+ let destpart := and(mload(dest), mask)
128
+ mstore(dest, or(destpart, srcpart))
129
+ }
130
+
131
+ return buf;
132
+ }
133
+
134
+ /**
135
+ * @dev Appends a byte string to a buffer. Resizes if doing so would exceed
136
+ * the capacity of the buffer.
137
+ * @param buf The buffer to append to.
138
+ * @param data The data to append.
139
+ * @param len The number of bytes to copy.
140
+ * @return The original buffer, for chaining.
141
+ */
142
+ function append(buffer memory buf, bytes memory data, uint len) internal pure returns (buffer memory) {
143
+ return write(buf, buf.buf.length, data, len);
144
+ }
145
+
146
+ /**
147
+ * @dev Appends a byte string to a buffer. Resizes if doing so would exceed
148
+ * the capacity of the buffer.
149
+ * @param buf The buffer to append to.
150
+ * @param data The data to append.
151
+ * @return The original buffer, for chaining.
152
+ */
153
+ function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {
154
+ return write(buf, buf.buf.length, data, data.length);
155
+ }
156
+
157
+ /**
158
+ * @dev Writes a byte to the buffer. Resizes if doing so would exceed the
159
+ * capacity of the buffer.
160
+ * @param buf The buffer to append to.
161
+ * @param off The offset to write the byte at.
162
+ * @param data The data to append.
163
+ * @return The original buffer, for chaining.
164
+ */
165
+ function writeUint8(buffer memory buf, uint off, uint8 data) internal pure returns(buffer memory) {
166
+ if (off >= buf.capacity) {
167
+ resize(buf, buf.capacity * 2);
168
+ }
169
+
170
+ assembly {
171
+ // Memory address of the buffer data
172
+ let bufptr := mload(buf)
173
+ // Length of existing buffer data
174
+ let buflen := mload(bufptr)
175
+ // Address = buffer address + sizeof(buffer length) + off
176
+ let dest := add(add(bufptr, off), 32)
177
+ mstore8(dest, data)
178
+ // Update buffer length if we extended it
179
+ if eq(off, buflen) {
180
+ mstore(bufptr, add(buflen, 1))
181
+ }
182
+ }
183
+ return buf;
184
+ }
185
+
186
+ /**
187
+ * @dev Appends a byte to the buffer. Resizes if doing so would exceed the
188
+ * capacity of the buffer.
189
+ * @param buf The buffer to append to.
190
+ * @param data The data to append.
191
+ * @return The original buffer, for chaining.
192
+ */
193
+ function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) {
194
+ return writeUint8(buf, buf.buf.length, data);
195
+ }
196
+
197
+ /**
198
+ * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would
199
+ * exceed the capacity of the buffer.
200
+ * @param buf The buffer to append to.
201
+ * @param off The offset to write at.
202
+ * @param data The data to append.
203
+ * @param len The number of bytes to write (left-aligned).
204
+ * @return The original buffer, for chaining.
205
+ */
206
+ function write(buffer memory buf, uint off, bytes32 data, uint len) private pure returns(buffer memory) {
207
+ if (len + off > buf.capacity) {
208
+ resize(buf, (len + off) * 2);
209
+ }
210
+
211
+ uint mask = 256 ** len - 1;
212
+ // Right-align data
213
+ data = data >> (8 * (32 - len));
214
+ assembly {
215
+ // Memory address of the buffer data
216
+ let bufptr := mload(buf)
217
+ // Address = buffer address + sizeof(buffer length) + off + len
218
+ let dest := add(add(bufptr, off), len)
219
+ mstore(dest, or(and(mload(dest), not(mask)), data))
220
+ // Update buffer length if we extended it
221
+ if gt(add(off, len), mload(bufptr)) {
222
+ mstore(bufptr, add(off, len))
223
+ }
224
+ }
225
+ return buf;
226
+ }
227
+
228
+ /**
229
+ * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the
230
+ * capacity of the buffer.
231
+ * @param buf The buffer to append to.
232
+ * @param off The offset to write at.
233
+ * @param data The data to append.
234
+ * @return The original buffer, for chaining.
235
+ */
236
+ function writeBytes20(buffer memory buf, uint off, bytes20 data) internal pure returns (buffer memory) {
237
+ return write(buf, off, bytes32(data), 20);
238
+ }
239
+
240
+ /**
241
+ * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed
242
+ * the capacity of the buffer.
243
+ * @param buf The buffer to append to.
244
+ * @param data The data to append.
245
+ * @return The original buffer, for chhaining.
246
+ */
247
+ function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {
248
+ return write(buf, buf.buf.length, bytes32(data), 20);
249
+ }
250
+
251
+ /**
252
+ * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed
253
+ * the capacity of the buffer.
254
+ * @param buf The buffer to append to.
255
+ * @param data The data to append.
256
+ * @return The original buffer, for chaining.
257
+ */
258
+ function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {
259
+ return write(buf, buf.buf.length, data, 32);
260
+ }
261
+
262
+ /**
263
+ * @dev Writes an integer to the buffer. Resizes if doing so would exceed
264
+ * the capacity of the buffer.
265
+ * @param buf The buffer to append to.
266
+ * @param off The offset to write at.
267
+ * @param data The data to append.
268
+ * @param len The number of bytes to write (right-aligned).
269
+ * @return The original buffer, for chaining.
270
+ */
271
+ function writeInt(buffer memory buf, uint off, uint data, uint len) private pure returns(buffer memory) {
272
+ if (len + off > buf.capacity) {
273
+ resize(buf, (len + off) * 2);
274
+ }
275
+
276
+ uint mask = 256 ** len - 1;
277
+ assembly {
278
+ // Memory address of the buffer data
279
+ let bufptr := mload(buf)
280
+ // Address = buffer address + off + sizeof(buffer length) + len
281
+ let dest := add(add(bufptr, off), len)
282
+ mstore(dest, or(and(mload(dest), not(mask)), data))
283
+ // Update buffer length if we extended it
284
+ if gt(add(off, len), mload(bufptr)) {
285
+ mstore(bufptr, add(off, len))
286
+ }
287
+ }
288
+ return buf;
289
+ }
290
+
291
+ /**
292
+ * @dev Appends a byte to the end of the buffer. Resizes if doing so would
293
+ * exceed the capacity of the buffer.
294
+ * @param buf The buffer to append to.
295
+ * @param data The data to append.
296
+ * @return The original buffer.
297
+ */
298
+ function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) {
299
+ return writeInt(buf, buf.buf.length, data, len);
300
+ }
301
+ }
@@ -0,0 +1,71 @@
1
+ pragma solidity ^0.5.0;
2
+
3
+ import "./Buffer.sol";
4
+
5
+ library CBOR {
6
+ using Buffer for Buffer.buffer;
7
+
8
+ uint8 private constant MAJOR_TYPE_INT = 0;
9
+ uint8 private constant MAJOR_TYPE_NEGATIVE_INT = 1;
10
+ uint8 private constant MAJOR_TYPE_BYTES = 2;
11
+ uint8 private constant MAJOR_TYPE_STRING = 3;
12
+ uint8 private constant MAJOR_TYPE_ARRAY = 4;
13
+ uint8 private constant MAJOR_TYPE_MAP = 5;
14
+ uint8 private constant MAJOR_TYPE_CONTENT_FREE = 7;
15
+
16
+ function encodeType(Buffer.buffer memory buf, uint8 major, uint value) private pure {
17
+ if(value <= 23) {
18
+ buf.appendUint8(uint8((major << 5) | value));
19
+ } else if(value <= 0xFF) {
20
+ buf.appendUint8(uint8((major << 5) | 24));
21
+ buf.appendInt(value, 1);
22
+ } else if(value <= 0xFFFF) {
23
+ buf.appendUint8(uint8((major << 5) | 25));
24
+ buf.appendInt(value, 2);
25
+ } else if(value <= 0xFFFFFFFF) {
26
+ buf.appendUint8(uint8((major << 5) | 26));
27
+ buf.appendInt(value, 4);
28
+ } else if(value <= 0xFFFFFFFFFFFFFFFF) {
29
+ buf.appendUint8(uint8((major << 5) | 27));
30
+ buf.appendInt(value, 8);
31
+ }
32
+ }
33
+
34
+ function encodeIndefiniteLengthType(Buffer.buffer memory buf, uint8 major) private pure {
35
+ buf.appendUint8(uint8((major << 5) | 31));
36
+ }
37
+
38
+ function encodeUInt(Buffer.buffer memory buf, uint value) internal pure {
39
+ encodeType(buf, MAJOR_TYPE_INT, value);
40
+ }
41
+
42
+ function encodeInt(Buffer.buffer memory buf, int value) internal pure {
43
+ if(value >= 0) {
44
+ encodeType(buf, MAJOR_TYPE_INT, uint(value));
45
+ } else {
46
+ encodeType(buf, MAJOR_TYPE_NEGATIVE_INT, uint(-1 - value));
47
+ }
48
+ }
49
+
50
+ function encodeBytes(Buffer.buffer memory buf, bytes memory value) internal pure {
51
+ encodeType(buf, MAJOR_TYPE_BYTES, value.length);
52
+ buf.append(value);
53
+ }
54
+
55
+ function encodeString(Buffer.buffer memory buf, string memory value) internal pure {
56
+ encodeType(buf, MAJOR_TYPE_STRING, bytes(value).length);
57
+ buf.append(bytes(value));
58
+ }
59
+
60
+ function startArray(Buffer.buffer memory buf) internal pure {
61
+ encodeIndefiniteLengthType(buf, MAJOR_TYPE_ARRAY);
62
+ }
63
+
64
+ function startMap(Buffer.buffer memory buf) internal pure {
65
+ encodeIndefiniteLengthType(buf, MAJOR_TYPE_MAP);
66
+ }
67
+
68
+ function endSequence(Buffer.buffer memory buf) internal pure {
69
+ encodeIndefiniteLengthType(buf, MAJOR_TYPE_CONTENT_FREE);
70
+ }
71
+ }
@@ -0,0 +1,5 @@
1
+ pragma solidity ^0.5.0;
2
+
3
+ contract ENSResolver {
4
+ function addr(bytes32 node) public view returns (address);
5
+ }
@@ -0,0 +1,65 @@
1
+ pragma solidity ^0.5.0;
2
+
3
+ /**
4
+ * @dev Contract module which provides a basic access control mechanism, where
5
+ * there is an account (an owner) that can be granted exclusive access to
6
+ * specific functions.
7
+ *
8
+ * This module is used through inheritance. It will make available the modifier
9
+ * `onlyOwner`, which can be aplied to your functions to restrict their use to
10
+ * the owner.
11
+ *
12
+ * This contract has been modified to remove the revokeOwnership function
13
+ */
14
+ contract Ownable {
15
+ address private _owner;
16
+
17
+ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
18
+
19
+ /**
20
+ * @dev Initializes the contract setting the deployer as the initial owner.
21
+ */
22
+ constructor () internal {
23
+ _owner = msg.sender;
24
+ emit OwnershipTransferred(address(0), _owner);
25
+ }
26
+
27
+ /**
28
+ * @dev Returns the address of the current owner.
29
+ */
30
+ function owner() public view returns (address) {
31
+ return _owner;
32
+ }
33
+
34
+ /**
35
+ * @dev Throws if called by any account other than the owner.
36
+ */
37
+ modifier onlyOwner() {
38
+ require(isOwner(), "Ownable: caller is not the owner");
39
+ _;
40
+ }
41
+
42
+ /**
43
+ * @dev Returns true if the caller is the current owner.
44
+ */
45
+ function isOwner() public view returns (bool) {
46
+ return msg.sender == _owner;
47
+ }
48
+
49
+ /**
50
+ * @dev Transfers ownership of the contract to a new account (`newOwner`).
51
+ * Can only be called by the current owner.
52
+ */
53
+ function transferOwnership(address newOwner) public onlyOwner {
54
+ _transferOwnership(newOwner);
55
+ }
56
+
57
+ /**
58
+ * @dev Transfers ownership of the contract to a new account (`newOwner`).
59
+ */
60
+ function _transferOwnership(address newOwner) internal {
61
+ require(newOwner != address(0), "Ownable: new owner is the zero address");
62
+ emit OwnershipTransferred(_owner, newOwner);
63
+ _owner = newOwner;
64
+ }
65
+ }
@@ -0,0 +1,107 @@
1
+ pragma solidity ^0.5.0;
2
+
3
+ /**
4
+ * @dev Wrappers over Solidity's arithmetic operations with added overflow
5
+ * checks.
6
+ *
7
+ * Arithmetic operations in Solidity wrap on overflow. This can easily result
8
+ * in bugs, because programmers usually assume that an overflow raises an
9
+ * error, which is the standard behavior in high level programming languages.
10
+ * `SafeMath` restores this intuition by reverting the transaction when an
11
+ * operation overflows.
12
+ *
13
+ * Using this library instead of the unchecked operations eliminates an entire
14
+ * class of bugs, so it's recommended to use it always.
15
+ */
16
+ library SafeMath {
17
+ /**
18
+ * @dev Returns the addition of two unsigned integers, reverting on
19
+ * overflow.
20
+ *
21
+ * Counterpart to Solidity's `+` operator.
22
+ *
23
+ * Requirements:
24
+ * - Addition cannot overflow.
25
+ */
26
+ function add(uint256 a, uint256 b) internal pure returns (uint256) {
27
+ uint256 c = a + b;
28
+ require(c >= a, "SafeMath: addition overflow");
29
+
30
+ return c;
31
+ }
32
+
33
+ /**
34
+ * @dev Returns the subtraction of two unsigned integers, reverting on
35
+ * overflow (when the result is negative).
36
+ *
37
+ * Counterpart to Solidity's `-` operator.
38
+ *
39
+ * Requirements:
40
+ * - Subtraction cannot overflow.
41
+ */
42
+ function sub(uint256 a, uint256 b) internal pure returns (uint256) {
43
+ require(b <= a, "SafeMath: subtraction overflow");
44
+ uint256 c = a - b;
45
+
46
+ return c;
47
+ }
48
+
49
+ /**
50
+ * @dev Returns the multiplication of two unsigned integers, reverting on
51
+ * overflow.
52
+ *
53
+ * Counterpart to Solidity's `*` operator.
54
+ *
55
+ * Requirements:
56
+ * - Multiplication cannot overflow.
57
+ */
58
+ function mul(uint256 a, uint256 b) internal pure returns (uint256) {
59
+ // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
60
+ // benefit is lost if 'b' is also tested.
61
+ // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
62
+ if (a == 0) {
63
+ return 0;
64
+ }
65
+
66
+ uint256 c = a * b;
67
+ require(c / a == b, "SafeMath: multiplication overflow");
68
+
69
+ return c;
70
+ }
71
+
72
+ /**
73
+ * @dev Returns the integer division of two unsigned integers. Reverts on
74
+ * division by zero. The result is rounded towards zero.
75
+ *
76
+ * Counterpart to Solidity's `/` operator. Note: this function uses a
77
+ * `revert` opcode (which leaves remaining gas untouched) while Solidity
78
+ * uses an invalid opcode to revert (consuming all remaining gas).
79
+ *
80
+ * Requirements:
81
+ * - The divisor cannot be zero.
82
+ */
83
+ function div(uint256 a, uint256 b) internal pure returns (uint256) {
84
+ // Solidity only automatically asserts when dividing by 0
85
+ require(b > 0, "SafeMath: division by zero");
86
+ uint256 c = a / b;
87
+ // assert(a == b * c + a % b); // There is no case in which this doesn't hold
88
+
89
+ return c;
90
+ }
91
+
92
+ /**
93
+ * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
94
+ * Reverts when dividing by zero.
95
+ *
96
+ * Counterpart to Solidity's `%` operator. This function uses a `revert`
97
+ * opcode (which leaves remaining gas untouched) while Solidity uses an
98
+ * invalid opcode to revert (consuming all remaining gas).
99
+ *
100
+ * Requirements:
101
+ * - The divisor cannot be zero.
102
+ */
103
+ function mod(uint256 a, uint256 b) internal pure returns (uint256) {
104
+ require(b != 0, "SafeMath: modulo by zero");
105
+ return a % b;
106
+ }
107
+ }
@@ -0,0 +1,22 @@
1
+ pragma solidity ^0.5.0;
2
+
3
+ library SignedSafeMath {
4
+
5
+ /**
6
+ * @dev Adds two int256s and makes sure the result doesn't overflow. Signed
7
+ * integers aren't supported by the SafeMath library, thus this method
8
+ * @param _a The first number to be added
9
+ * @param _a The second number to be added
10
+ */
11
+ function add(int256 _a, int256 _b)
12
+ internal
13
+ pure
14
+ returns (int256)
15
+ {
16
+ // solium-disable-next-line zeppelin/no-arithmetic-operations
17
+ int256 c = _a + _b;
18
+ require((_b >= 0 && c >= _a) || (_b < 0 && c < _a), "SignedSafeMath: addition overflow");
19
+
20
+ return c;
21
+ }
22
+ }
@@ -0,0 +1,125 @@
1
+ pragma solidity ^0.6.0;
2
+
3
+ import { CBOR as CBOR_Chainlink, Buffer as Buffer_Chainlink } from "./vendor/CBOR.sol";
4
+
5
+ /**
6
+ * @title Library for common Chainlink functions
7
+ * @dev Uses imported CBOR library for encoding to buffer
8
+ */
9
+ library Chainlink {
10
+ uint256 internal constant defaultBufferSize = 256; // solhint-disable-line const-name-snakecase
11
+
12
+ using CBOR_Chainlink for Buffer_Chainlink.buffer;
13
+
14
+ struct Request {
15
+ bytes32 id;
16
+ address callbackAddress;
17
+ bytes4 callbackFunctionId;
18
+ uint256 nonce;
19
+ Buffer_Chainlink.buffer buf;
20
+ }
21
+
22
+ /**
23
+ * @notice Initializes a Chainlink request
24
+ * @dev Sets the ID, callback address, and callback function signature on the request
25
+ * @param self The uninitialized request
26
+ * @param _id The Job Specification ID
27
+ * @param _callbackAddress The callback address
28
+ * @param _callbackFunction The callback function signature
29
+ * @return The initialized request
30
+ */
31
+ function initialize(
32
+ Request memory self,
33
+ bytes32 _id,
34
+ address _callbackAddress,
35
+ bytes4 _callbackFunction
36
+ ) internal pure returns (Chainlink.Request memory) {
37
+ Buffer_Chainlink.init(self.buf, defaultBufferSize);
38
+ self.id = _id;
39
+ self.callbackAddress = _callbackAddress;
40
+ self.callbackFunctionId = _callbackFunction;
41
+ return self;
42
+ }
43
+
44
+ /**
45
+ * @notice Sets the data for the buffer without encoding CBOR on-chain
46
+ * @dev CBOR can be closed with curly-brackets {} or they can be left off
47
+ * @param self The initialized request
48
+ * @param _data The CBOR data
49
+ */
50
+ function setBuffer(Request memory self, bytes memory _data)
51
+ internal pure
52
+ {
53
+ Buffer_Chainlink.init(self.buf, _data.length);
54
+ Buffer_Chainlink.append(self.buf, _data);
55
+ }
56
+
57
+ /**
58
+ * @notice Adds a string value to the request with a given key name
59
+ * @param self The initialized request
60
+ * @param _key The name of the key
61
+ * @param _value The string value to add
62
+ */
63
+ function add(Request memory self, string memory _key, string memory _value)
64
+ internal pure
65
+ {
66
+ self.buf.encodeString(_key);
67
+ self.buf.encodeString(_value);
68
+ }
69
+
70
+ /**
71
+ * @notice Adds a bytes value to the request with a given key name
72
+ * @param self The initialized request
73
+ * @param _key The name of the key
74
+ * @param _value The bytes value to add
75
+ */
76
+ function addBytes(Request memory self, string memory _key, bytes memory _value)
77
+ internal pure
78
+ {
79
+ self.buf.encodeString(_key);
80
+ self.buf.encodeBytes(_value);
81
+ }
82
+
83
+ /**
84
+ * @notice Adds a int256 value to the request with a given key name
85
+ * @param self The initialized request
86
+ * @param _key The name of the key
87
+ * @param _value The int256 value to add
88
+ */
89
+ function addInt(Request memory self, string memory _key, int256 _value)
90
+ internal pure
91
+ {
92
+ self.buf.encodeString(_key);
93
+ self.buf.encodeInt(_value);
94
+ }
95
+
96
+ /**
97
+ * @notice Adds a uint256 value to the request with a given key name
98
+ * @param self The initialized request
99
+ * @param _key The name of the key
100
+ * @param _value The uint256 value to add
101
+ */
102
+ function addUint(Request memory self, string memory _key, uint256 _value)
103
+ internal pure
104
+ {
105
+ self.buf.encodeString(_key);
106
+ self.buf.encodeUInt(_value);
107
+ }
108
+
109
+ /**
110
+ * @notice Adds an array of strings to the request with a given key name
111
+ * @param self The initialized request
112
+ * @param _key The name of the key
113
+ * @param _values The array of string values to add
114
+ */
115
+ function addStringArray(Request memory self, string memory _key, string[] memory _values)
116
+ internal pure
117
+ {
118
+ self.buf.encodeString(_key);
119
+ self.buf.startArray();
120
+ for (uint256 i = 0; i < _values.length; i++) {
121
+ self.buf.encodeString(_values[i]);
122
+ }
123
+ self.buf.endSequence();
124
+ }
125
+ }