@stake-dao/reader 0.4.24 → 0.4.26

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 (92) hide show
  1. package/dist/esm/bytecodes/index.js +3 -3
  2. package/dist/esm/bytecodes/index.js.map +1 -1
  3. package/dist/esm/bytecodes/tokenData.js +6 -18
  4. package/dist/esm/bytecodes/tokenData.js.map +1 -1
  5. package/dist/esm/bytecodes/votemarket/batchCampaigns.js +59 -0
  6. package/dist/esm/bytecodes/votemarket/batchCampaigns.js.map +1 -0
  7. package/dist/esm/bytecodes/votemarket/curve/batchCurveGauges.js.map +1 -0
  8. package/dist/esm/bytecodes/votemarket/curve/batchCurveGaugesMetadata.js.map +1 -0
  9. package/dist/esm/bytecodes/votemarket/curve/batchCurveOldLps.js.map +1 -0
  10. package/dist/esm/bytecodes/votemarket/curve/batchCurveUserVotes.js.map +1 -0
  11. package/dist/esm/index.js +3 -0
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/lockers/fetch/index.js +12 -4
  14. package/dist/esm/lockers/fetch/index.js.map +1 -1
  15. package/dist/esm/lockers/utils/getHttpCalls.js +3 -1
  16. package/dist/esm/lockers/utils/getHttpCalls.js.map +1 -1
  17. package/dist/esm/strategies/curve/build.js +3 -5
  18. package/dist/esm/strategies/curve/build.js.map +1 -1
  19. package/dist/esm/strategies/yearn/build.js +3 -5
  20. package/dist/esm/strategies/yearn/build.js.map +1 -1
  21. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  22. package/dist/esm/utils.js +1 -0
  23. package/dist/esm/utils.js.map +1 -1
  24. package/dist/esm/votemarket/curve/fetchCurveUserVotes.js +1 -1
  25. package/dist/esm/votemarket/curve/fetchCurveUserVotes.js.map +1 -1
  26. package/dist/esm/votemarket/curve/fetchSnapshotUserData.js +69 -0
  27. package/dist/esm/votemarket/curve/fetchSnapshotUserData.js.map +1 -0
  28. package/dist/esm/votemarket/fetchCampaigns.js +83 -0
  29. package/dist/esm/votemarket/fetchCampaigns.js.map +1 -0
  30. package/dist/types/bytecodes/index.d.ts +3 -3
  31. package/dist/types/bytecodes/index.d.ts.map +1 -1
  32. package/dist/types/bytecodes/tokenData.d.ts +2 -2
  33. package/dist/types/bytecodes/tokenData.d.ts.map +1 -1
  34. package/dist/types/bytecodes/types.d.ts +6 -0
  35. package/dist/types/bytecodes/types.d.ts.map +1 -1
  36. package/dist/types/bytecodes/votemarket/batchCampaigns.d.ts +4 -0
  37. package/dist/types/bytecodes/votemarket/batchCampaigns.d.ts.map +1 -0
  38. package/dist/types/bytecodes/votemarket/curve/batchCurveGauges.d.ts +4 -0
  39. package/dist/types/bytecodes/votemarket/curve/batchCurveGauges.d.ts.map +1 -0
  40. package/dist/types/bytecodes/votemarket/curve/batchCurveGaugesMetadata.d.ts +4 -0
  41. package/dist/types/bytecodes/votemarket/curve/batchCurveGaugesMetadata.d.ts.map +1 -0
  42. package/dist/types/bytecodes/votemarket/curve/batchCurveOldLps.d.ts +4 -0
  43. package/dist/types/bytecodes/votemarket/curve/batchCurveOldLps.d.ts.map +1 -0
  44. package/dist/types/bytecodes/votemarket/curve/batchCurveUserVotes.d.ts +4 -0
  45. package/dist/types/bytecodes/votemarket/curve/batchCurveUserVotes.d.ts.map +1 -0
  46. package/dist/types/index.d.ts +2 -0
  47. package/dist/types/index.d.ts.map +1 -1
  48. package/dist/types/lockers/fetch/index.d.ts.map +1 -1
  49. package/dist/types/lockers/utils/getHttpCalls.d.ts +3 -0
  50. package/dist/types/lockers/utils/getHttpCalls.d.ts.map +1 -1
  51. package/dist/types/strategies/curve/build.d.ts.map +1 -1
  52. package/dist/types/strategies/yearn/build.d.ts.map +1 -1
  53. package/dist/types/utils.d.ts +1 -0
  54. package/dist/types/utils.d.ts.map +1 -1
  55. package/dist/types/votemarket/curve/fetchSnapshotUserData.d.ts +25 -0
  56. package/dist/types/votemarket/curve/fetchSnapshotUserData.d.ts.map +1 -0
  57. package/dist/types/votemarket/fetchCampaigns.d.ts +19 -0
  58. package/dist/types/votemarket/fetchCampaigns.d.ts.map +1 -0
  59. package/package.json +3 -2
  60. package/src/bytecodes/index.ts +3 -3
  61. package/src/bytecodes/tokenData.ts +9 -22
  62. package/src/bytecodes/types.ts +7 -0
  63. package/src/bytecodes/votemarket/batchCampaigns.ts +61 -0
  64. package/src/bytecodes/votemarket/{batchCurveGauges.ts → curve/batchCurveGauges.ts} +1 -1
  65. package/src/bytecodes/votemarket/{batchCurveGaugesMetadata.ts → curve/batchCurveGaugesMetadata.ts} +1 -1
  66. package/src/bytecodes/votemarket/{batchCurveOldLps.ts → curve/batchCurveOldLps.ts} +1 -1
  67. package/src/bytecodes/votemarket/{batchCurveUserVotes.ts → curve/batchCurveUserVotes.ts} +1 -1
  68. package/src/index.ts +4 -0
  69. package/src/lockers/fetch/index.ts +16 -6
  70. package/src/lockers/utils/getHttpCalls.ts +3 -1
  71. package/src/strategies/curve/build.ts +3 -8
  72. package/src/strategies/yearn/build.ts +3 -8
  73. package/src/utils.ts +2 -0
  74. package/src/votemarket/curve/fetchCurveUserVotes.ts +1 -1
  75. package/src/votemarket/curve/fetchSnapshotUserData.ts +114 -0
  76. package/src/votemarket/fetchCampaigns.ts +115 -0
  77. package/dist/esm/bytecodes/votemarket/batchCurveGauges.js.map +0 -1
  78. package/dist/esm/bytecodes/votemarket/batchCurveGaugesMetadata.js.map +0 -1
  79. package/dist/esm/bytecodes/votemarket/batchCurveOldLps.js.map +0 -1
  80. package/dist/esm/bytecodes/votemarket/batchCurveUserVotes.js.map +0 -1
  81. package/dist/types/bytecodes/votemarket/batchCurveGauges.d.ts +0 -4
  82. package/dist/types/bytecodes/votemarket/batchCurveGauges.d.ts.map +0 -1
  83. package/dist/types/bytecodes/votemarket/batchCurveGaugesMetadata.d.ts +0 -4
  84. package/dist/types/bytecodes/votemarket/batchCurveGaugesMetadata.d.ts.map +0 -1
  85. package/dist/types/bytecodes/votemarket/batchCurveOldLps.d.ts +0 -4
  86. package/dist/types/bytecodes/votemarket/batchCurveOldLps.d.ts.map +0 -1
  87. package/dist/types/bytecodes/votemarket/batchCurveUserVotes.d.ts +0 -4
  88. package/dist/types/bytecodes/votemarket/batchCurveUserVotes.d.ts.map +0 -1
  89. /package/dist/esm/bytecodes/votemarket/{batchCurveGauges.js → curve/batchCurveGauges.js} +0 -0
  90. /package/dist/esm/bytecodes/votemarket/{batchCurveGaugesMetadata.js → curve/batchCurveGaugesMetadata.js} +0 -0
  91. /package/dist/esm/bytecodes/votemarket/{batchCurveOldLps.js → curve/batchCurveOldLps.js} +0 -0
  92. /package/dist/esm/bytecodes/votemarket/{batchCurveUserVotes.js → curve/batchCurveUserVotes.js} +0 -0
@@ -0,0 +1,61 @@
1
+ import type { BatchMetaData } from '../types.js'
2
+
3
+ const batchCampaigns: BatchMetaData = {
4
+ bytecode: {
5
+ 1: '0x608060405234801561000f575f80fd5b506040516111f93803806111f98339818101604052810190610031919061086b565b5f8390505f821461004257816100b0565b8073ffffffffffffffffffffffffffffffffffffffff16637274e30d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100af91906108bb565b5b91505f83836100bf9190610913565b67ffffffffffffffff8111156100d8576100d7610946565b5b60405190808252806020026020018201604052801561011157816020015b6100fe6106b4565b8152602001906001900390816100f65790505b5090505f8490505b83811015610685576101296106b4565b81815f0181815250508373ffffffffffffffffffffffffffffffffffffffff16635598f8cc836040518263ffffffff1660e01b815260040161016b9190610982565b61016060405180830381865afa158015610187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ab9190610b39565b81602001819052508373ffffffffffffffffffffffffffffffffffffffff166355b88ff6836040518263ffffffff1660e01b81526004016101ec9190610982565b602060405180830381865afa158015610207573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061022b9190610b9a565b8160400190151590811515815250508373ffffffffffffffffffffffffffffffffffffffff1663df4c3d10836040518263ffffffff1660e01b81526004016102739190610982565b602060405180830381865afa15801561028e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b29190610b9a565b8160600190151590811515815250508373ffffffffffffffffffffffffffffffffffffffff16636fb08df2836040518263ffffffff1660e01b81526004016102fa9190610982565b5f60405180830381865afa158015610314573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061033c9190610c8d565b81608001819052505f8473ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b291906108bb565b90505f82604001516103c457816103cf565b826020015161012001515b90508573ffffffffffffffffffffffffffffffffffffffff166352aed57885836040518363ffffffff1660e01b815260040161040c929190610cd4565b608060405180830381865afa158015610427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044b9190610d70565b8360a001819052508573ffffffffffffffffffffffffffffffffffffffff16639dd5359785846040518363ffffffff1660e01b815260040161048e929190610cd4565b602060405180830381865afa1580156104a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104cd91906108bb565b8360c00181815250505f8290505b8360200151610100015181111561064a575f8773ffffffffffffffffffffffffffffffffffffffff166317f3a72287846040518363ffffffff1660e01b8152600401610528929190610cd4565b608060405180830381865afa158015610543573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105679190610e10565b90505f8160200151146105ca57805f015185602001516080019060ff16908160ff16815250508060200151856020015160c00181815250508060400151856020015160a0018181525050806060015185602001516101200181815250505061064a565b8773ffffffffffffffffffffffffffffffffffffffff1663ac4746ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610613573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063791906108bb565b826106429190610913565b9150506104db565b83868a876106589190610913565b8151811061066957610668610e3b565b5b6020026020010181905250505050508080600101915050610119565b505f8160405160200161069891906111d8565b6040516020818303038152906040529050602081018059038082f35b6040518060e001604052805f81526020016106cd6106fd565b81526020015f151581526020015f15158152602001606081526020016106f16107a7565b81526020015f81525090565b6040518061016001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f60ff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610807826107de565b9050919050565b610817816107fd565b8114610821575f80fd5b50565b5f815190506108328161080e565b92915050565b5f819050919050565b61084a81610838565b8114610854575f80fd5b50565b5f8151905061086581610841565b92915050565b5f805f60608486031215610882576108816107d6565b5b5f61088f86828701610824565b93505060206108a086828701610857565b92505060406108b186828701610857565b9150509250925092565b5f602082840312156108d0576108cf6107d6565b5b5f6108dd84828501610857565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61091d82610838565b915061092883610838565b92508282039050818111156109405761093f6108e6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61097c81610838565b82525050565b5f6020820190506109955f830184610973565b92915050565b5f80fd5b5f601f19601f8301169050919050565b6109b88261099f565b810181811067ffffffffffffffff821117156109d7576109d6610946565b5b80604052505050565b5f6109e96107cd565b90506109f582826109af565b919050565b5f60ff82169050919050565b610a0f816109fa565b8114610a19575f80fd5b50565b5f81519050610a2a81610a06565b92915050565b5f6101608284031215610a4657610a4561099b565b5b610a516101606109e0565b90505f610a6084828501610857565b5f830152506020610a7384828501610824565b6020830152506040610a8784828501610824565b6040830152506060610a9b84828501610824565b6060830152506080610aaf84828501610a1c565b60808301525060a0610ac384828501610857565b60a08301525060c0610ad784828501610857565b60c08301525060e0610aeb84828501610857565b60e083015250610100610b0084828501610857565b61010083015250610120610b1684828501610857565b61012083015250610140610b2c84828501610824565b6101408301525092915050565b5f6101608284031215610b4f57610b4e6107d6565b5b5f610b5c84828501610a30565b91505092915050565b5f8115159050919050565b610b7981610b65565b8114610b83575f80fd5b50565b5f81519050610b9481610b70565b92915050565b5f60208284031215610baf57610bae6107d6565b5b5f610bbc84828501610b86565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115610be357610be2610946565b5b602082029050602081019050919050565b5f80fd5b5f610c0a610c0584610bc9565b6109e0565b90508083825260208201905060208402830185811115610c2d57610c2c610bf4565b5b835b81811015610c565780610c428882610824565b845260208401935050602081019050610c2f565b5050509392505050565b5f82601f830112610c7457610c73610bc5565b5b8151610c84848260208601610bf8565b91505092915050565b5f60208284031215610ca257610ca16107d6565b5b5f82015167ffffffffffffffff811115610cbf57610cbe6107da565b5b610ccb84828501610c60565b91505092915050565b5f604082019050610ce75f830185610973565b610cf46020830184610973565b9392505050565b5f60808284031215610d1057610d0f61099b565b5b610d1a60806109e0565b90505f610d2984828501610857565b5f830152506020610d3c84828501610857565b6020830152506040610d5084828501610857565b6040830152506060610d6484828501610b86565b60608301525092915050565b5f60808284031215610d8557610d846107d6565b5b5f610d9284828501610cfb565b91505092915050565b5f60808284031215610db057610daf61099b565b5b610dba60806109e0565b90505f610dc984828501610a1c565b5f830152506020610ddc84828501610857565b6020830152506040610df084828501610857565b6040830152506060610e0484828501610857565b60608301525092915050565b5f60808284031215610e2557610e246107d6565b5b5f610e3284828501610d9b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610e9a81610838565b82525050565b610ea9816107fd565b82525050565b610eb8816109fa565b82525050565b61016082015f820151610ed35f850182610e91565b506020820151610ee66020850182610ea0565b506040820151610ef96040850182610ea0565b506060820151610f0c6060850182610ea0565b506080820151610f1f6080850182610eaf565b5060a0820151610f3260a0850182610e91565b5060c0820151610f4560c0850182610e91565b5060e0820151610f5860e0850182610e91565b50610100820151610f6d610100850182610e91565b50610120820151610f82610120850182610e91565b50610140820151610f97610140850182610ea0565b50505050565b610fa681610b65565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610fe08383610ea0565b60208301905092915050565b5f602082019050919050565b5f61100282610fac565b61100c8185610fb6565b935061101783610fc6565b805f5b8381101561104757815161102e8882610fd5565b975061103983610fec565b92505060018101905061101a565b5085935050505092915050565b608082015f8201516110685f850182610e91565b50602082015161107b6020850182610e91565b50604082015161108e6040850182610e91565b5060608201516110a16060850182610f9d565b50505050565b5f61028083015f8301516110bd5f860182610e91565b5060208301516110d06020860182610ebe565b5060408301516110e4610180860182610f9d565b5060608301516110f86101a0860182610f9d565b5060808301518482036101c08601526111118282610ff8565b91505060a08301516111276101e0860182611054565b5060c083015161113b610260860182610e91565b508091505092915050565b5f61115183836110a7565b905092915050565b5f602082019050919050565b5f61116f82610e68565b6111798185610e72565b93508360208202850161118b85610e82565b805f5b858110156111c657848403895281516111a78582611146565b94506111b283611159565b925060208a0199505060018101905061118e565b50829750879550505050505092915050565b5f6020820190508181035f8301526111f08184611165565b90509291505056fe',
6
+ },
7
+ inputType: {
8
+ 1: ['address platform, uint256 skip, uint256 limit'],
9
+ },
10
+ outputTypeHr: {
11
+ 1: [
12
+ 'CampaignData[] memory returnData',
13
+ 'struct CampaignData { Campaign campaign; bool isClosed; bool isWhitelistOnly; address[] addresses; }',
14
+ 'struct Campaign { uint256 chainId; address gauge; address manager; address rewardToken; uint8 numberOfPeriods; uint256 maxRewardPerVote; uint256 totalRewardAmount; uint256 totalDistributed; uint256 startTimestamp; uint256 endTimestamp; address hook; }',
15
+ ],
16
+ },
17
+ outputType: {
18
+ 1: [
19
+ {
20
+ type: 'tuple[]',
21
+ name: 'returnData',
22
+ components: [
23
+ { type: 'uint256', name: 'id' },
24
+ {
25
+ type: 'tuple',
26
+ name: 'campaign',
27
+ components: [
28
+ { type: 'uint256', name: 'chainId' },
29
+ { type: 'address', name: 'gauge' },
30
+ { type: 'address', name: 'manager' },
31
+ { type: 'address', name: 'rewardToken' },
32
+ { type: 'uint8', name: 'numberOfPeriods' },
33
+ { type: 'uint256', name: 'maxRewardPerVote' },
34
+ { type: 'uint256', name: 'totalRewardAmount' },
35
+ { type: 'uint256', name: 'totalDistributed' },
36
+ { type: 'uint256', name: 'startTimestamp' },
37
+ { type: 'uint256', name: 'endTimestamp' },
38
+ { type: 'address', name: 'hook' },
39
+ ],
40
+ },
41
+ { type: 'bool', name: 'isKilled' },
42
+ { type: 'bool', name: 'isWhitelistOnly' },
43
+ { type: 'address[]', name: 'addresses' },
44
+ {
45
+ type: 'tuple',
46
+ name: 'currentPeriod',
47
+ components: [
48
+ { type: 'uint256', name: 'rewardPerPeriod' },
49
+ { type: 'uint256', name: 'rewardPerVote' },
50
+ { type: 'uint256', name: 'leftover' },
51
+ { type: 'bool', name: 'updated' },
52
+ ],
53
+ },
54
+ { type: 'uint256', name: 'periodLeft' },
55
+ ],
56
+ },
57
+ ],
58
+ },
59
+ }
60
+
61
+ export default batchCampaigns
@@ -1,4 +1,4 @@
1
- import type { BatchMetaData } from '../types.js'
1
+ import type { BatchMetaData } from '../../types.js'
2
2
 
3
3
  const batchCurveGauges: BatchMetaData = {
4
4
  bytecode: {
@@ -1,4 +1,4 @@
1
- import type { BatchMetaData } from '../types.js'
1
+ import type { BatchMetaData } from '../../types.js'
2
2
 
3
3
  const commonBytecode =
4
4
  '0x608060405234801561000f575f80fd5b5060405161130938038061130983398181016040528101906100319190610dd1565b5f815190505f8167ffffffffffffffff81111561005157610050610c3b565b5b60405190808252806020026020018201604052801561008a57816020015b610077610b9e565b81526020019060019003908161006f5790505b5090505f5b8281101561038f5761009f610b9e565b5f8583815181106100b3576100b2610e18565b5b6020026020010151905080825f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa15801561013e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101629190610e45565b90508083602001515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101ae816103be60201b60201c565b856020015160200186602001516040018760200151606001838152508390528390525050505f6101e3826105a360201b60201c565b90505f815190505f8167ffffffffffffffff81111561020557610204610c3b565b5b60405190808252806020026020018201604052801561023e57816020015b61022b610bda565b8152602001906001900390816102235790505b5090505f5b828110156103535783818151811061025e5761025d610e18565b5b602002602001015182828151811061027957610278610e18565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102df8482815181106102cc576102cb610e18565b5b60200260200101516103be60201b60201c565b8484815181106102f2576102f1610e18565b5b60200260200101516020018585815181106103105761030f610e18565b5b602002602001015160400186868151811061032e5761032d610e18565b5b6020026020010151606001838152508390528390525050508080600101915050610243565b508086604001819052508588888151811061037157610370610e18565b5b6020026020010181905250505050505050808060010191505061008f565b505f816040516020016103a29190611128565b6040516020818303038152906040529050602081018059038082f35b6060805f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561043e575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561059c575f8490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561048f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906104b791906111ea565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610501573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061052991906111ea565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610574573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610598919061125b565b9150505b9193909250565b60605f600467ffffffffffffffff8111156105c1576105c0610c3b565b5b6040519080825280602002602001820160405280156105ef5781602001602082028036833780820191505090505b5090505f808473ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527fa980497e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161069b91906112ca565b5f60405180830381855afa9150503d805f81146106d3576040519150601f19603f3d011682016040523d82523d5f602084013e6106d8565b606091505b50915091508180156106ea57505f8151115b1561086f578473ffffffffffffffffffffffffffffffffffffffff1663765337b66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075c9190610e45565b835f8151811061076f5761076e610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff16632621db2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108169190610e45565b8360018151811061082a57610829610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050829350505050610b01565b5f808673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f07546172000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161091891906112ca565b5f60405180830381855afa9150503d805f8114610950576040519150601f19603f3d011682016040523d82523d5f602084013e610955565b606091505b509150915081801561096757505f8151115b1561097e5761097b81610b0660201b60201c565b96505b61098e875f610b1360201b60201c565b855f815181106109a1576109a0610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506109ec876001610b1360201b60201c565b85600181518110610a00576109ff610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610a4b876002610b1360201b60201c565b85600281518110610a5f57610a5e610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610aaa876003610b1360201b60201c565b85600381518110610abe57610abd610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084955050505050505b919050565b5f60208201519050919050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b8152600401610b4d91906112ef565b602060405180830381865afa925050508015610b8757506040513d601f19601f82011682018060405250810190610b849190610e45565b60015b610b93575f9050610b98565b809150505b92915050565b60405180606001604052805f73ffffffffffffffffffffffffffffffffffffffff168152602001610bcd610bda565b8152602001606081525090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610c7182610c2b565b810181811067ffffffffffffffff82111715610c9057610c8f610c3b565b5b80604052505050565b5f610ca2610c16565b9050610cae8282610c68565b919050565b5f67ffffffffffffffff821115610ccd57610ccc610c3b565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d0b82610ce2565b9050919050565b610d1b81610d01565b8114610d25575f80fd5b50565b5f81519050610d3681610d12565b92915050565b5f610d4e610d4984610cb3565b610c99565b90508083825260208201905060208402830185811115610d7157610d70610cde565b5b835b81811015610d9a5780610d868882610d28565b845260208401935050602081019050610d73565b5050509392505050565b5f82601f830112610db857610db7610c27565b5b8151610dc8848260208601610d3c565b91505092915050565b5f60208284031215610de657610de5610c1f565b5b5f82015167ffffffffffffffff811115610e0357610e02610c23565b5b610e0f84828501610da4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610e5a57610e59610c1f565b5b5f610e6784828501610d28565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610ea281610d01565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610eda82610ea8565b610ee48185610eb2565b9350610ef4818560208601610ec2565b610efd81610c2b565b840191505092915050565b5f819050919050565b610f1a81610f08565b82525050565b5f608083015f830151610f355f860182610e99565b5060208301518482036020860152610f4d8282610ed0565b91505060408301518482036040860152610f678282610ed0565b9150506060830151610f7c6060860182610f11565b508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610fbb8383610f20565b905092915050565b5f602082019050919050565b5f610fd982610f87565b610fe38185610f91565b935083602082028501610ff585610fa1565b805f5b8581101561103057848403895281516110118582610fb0565b945061101c83610fc3565b925060208a01995050600181019050610ff8565b50829750879550505050505092915050565b5f606083015f8301516110575f860182610e99565b506020830151848203602086015261106f8282610f20565b915050604083015184820360408601526110898282610fcf565b9150508091505092915050565b5f6110a18383611042565b905092915050565b5f602082019050919050565b5f6110bf82610e70565b6110c98185610e7a565b9350836020820285016110db85610e8a565b805f5b8581101561111657848403895281516110f78582611096565b9450611102836110a9565b925060208a019950506001810190506110de565b50829750879550505050505092915050565b5f6020820190508181035f83015261114081846110b5565b905092915050565b5f80fd5b5f67ffffffffffffffff82111561116657611165610c3b565b5b61116f82610c2b565b9050602081019050919050565b5f61118e6111898461114c565b610c99565b9050828152602081018484840111156111aa576111a9611148565b5b6111b5848285610ec2565b509392505050565b5f82601f8301126111d1576111d0610c27565b5b81516111e184826020860161117c565b91505092915050565b5f602082840312156111ff576111fe610c1f565b5b5f82015167ffffffffffffffff81111561121c5761121b610c23565b5b611228848285016111bd565b91505092915050565b61123a81610f08565b8114611244575f80fd5b50565b5f8151905061125581611231565b92915050565b5f602082840312156112705761126f610c1f565b5b5f61127d84828501611247565b91505092915050565b5f81519050919050565b5f81905092915050565b5f6112a482611286565b6112ae8185611290565b93506112be818560208601610ec2565b80840191505092915050565b5f6112d5828461129a565b915081905092915050565b6112e981610f08565b82525050565b5f6020820190506113025f8301846112e0565b9291505056fe'
@@ -1,4 +1,4 @@
1
- import type { BatchMetaData } from '../types.js'
1
+ import type { BatchMetaData } from '../../types.js'
2
2
 
3
3
  const commonBytecode =
4
4
  '0x608060405234801561000f575f80fd5b50604051610f87380380610f87833981810160405281019061003191906108e3565b5f8290505f825190505f8167ffffffffffffffff811115610055576100546107a7565b5b60405190808252806020026020018201604052801561008e57816020015b61007b6106b6565b8152602001906001900390816100735790505b5090505f5b828110156104a2576100a36106b6565b5f8683815181106100b7576100b661093d565b5b6020026020010151905080825f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8673ffffffffffffffffffffffffffffffffffffffff1663bdf475c3836040518263ffffffff1660e01b81526004016101329190610979565b602060405180830381865afa15801561014d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101719190610992565b90508673ffffffffffffffffffffffffffffffffffffffff16635c911741826040518263ffffffff1660e01b81526004016101ac9190610979565b5f60405180830381865afa1580156101c6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906101ee9190610a6d565b83602001819052505f8773ffffffffffffffffffffffffffffffffffffffff16639ac90d3d836040518263ffffffff1660e01b81526004016102309190610979565b61010060405180830381865afa15801561024c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102709190610b62565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663940494f1846040518263ffffffff1660e01b81526004016102ac9190610979565b6040805180830381865afa1580156102c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ea9190610c6f565b5f600281106102fc576102fb61093d565b5b602002015190505f8167ffffffffffffffff81111561031e5761031d6107a7565b5b60405190808252806020026020018201604052801561035757816020015b6103446106ec565b81526020019060019003908161033c5790505b5090505f5b82811015610466578381600881106103775761037661093d565b5b602002015182828151811061038f5761038e61093d565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506103f28482600881106103e2576103e161093d565b5b60200201516104d160201b60201c565b8484815181106104055761040461093d565b5b60200260200101516020018585815181106104235761042261093d565b5b60200260200101516040018686815181106104415761044061093d565b5b602002602001015160600183815250839052839052505050808060010191505061035c565b50808660400181905250858888815181106104845761048361093d565b5b60200260200101819052505050505050508080600101915050610093565b505f816040516020016104b59190610f3b565b6040516020818303038152906040529050602081018059038082f35b6060805f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610551575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156106af575f8490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156105a2573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105ca9190610a6d565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610614573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061063c9190610a6d565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ab9190610f5b565b9150505b9193909250565b60405180606001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081525090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61076282610739565b9050919050565b61077281610758565b811461077c575f80fd5b50565b5f8151905061078d81610769565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107dd82610797565b810181811067ffffffffffffffff821117156107fc576107fb6107a7565b5b80604052505050565b5f61080e610728565b905061081a82826107d4565b919050565b5f67ffffffffffffffff821115610839576108386107a7565b5b602082029050602081019050919050565b5f80fd5b5f61086061085b8461081f565b610805565b905080838252602082019050602084028301858111156108835761088261084a565b5b835b818110156108ac5780610898888261077f565b845260208401935050602081019050610885565b5050509392505050565b5f82601f8301126108ca576108c9610793565b5b81516108da84826020860161084e565b91505092915050565b5f80604083850312156108f9576108f8610731565b5b5f6109068582860161077f565b925050602083015167ffffffffffffffff81111561092757610926610735565b5b610933858286016108b6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61097381610758565b82525050565b5f60208201905061098c5f83018461096a565b92915050565b5f602082840312156109a7576109a6610731565b5b5f6109b48482850161077f565b91505092915050565b5f80fd5b5f67ffffffffffffffff8211156109db576109da6107a7565b5b6109e482610797565b9050602081019050919050565b8281835e5f83830152505050565b5f610a11610a0c846109c1565b610805565b905082815260208101848484011115610a2d57610a2c6109bd565b5b610a388482856109f1565b509392505050565b5f82601f830112610a5457610a53610793565b5b8151610a648482602086016109ff565b91505092915050565b5f60208284031215610a8257610a81610731565b5b5f82015167ffffffffffffffff811115610a9f57610a9e610735565b5b610aab84828501610a40565b91505092915050565b5f67ffffffffffffffff821115610ace57610acd6107a7565b5b602082029050919050565b5f610aeb610ae684610ab4565b610805565b90508060208402830185811115610b0557610b0461084a565b5b835b81811015610b2e5780610b1a888261077f565b845260208401935050602081019050610b07565b5050509392505050565b5f82601f830112610b4c57610b4b610793565b5b6008610b59848285610ad9565b91505092915050565b5f6101008284031215610b7857610b77610731565b5b5f610b8584828501610b38565b91505092915050565b5f67ffffffffffffffff821115610ba857610ba76107a7565b5b602082029050919050565b5f819050919050565b610bc581610bb3565b8114610bcf575f80fd5b50565b5f81519050610be081610bbc565b92915050565b5f610bf8610bf384610b8e565b610805565b90508060208402830185811115610c1257610c1161084a565b5b835b81811015610c3b5780610c278882610bd2565b845260208401935050602081019050610c14565b5050509392505050565b5f82601f830112610c5957610c58610793565b5b6002610c66848285610be6565b91505092915050565b5f60408284031215610c8457610c83610731565b5b5f610c9184828501610c45565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610ccc81610758565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610cf682610cd2565b610d008185610cdc565b9350610d108185602086016109f1565b610d1981610797565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610d5681610bb3565b82525050565b5f608083015f830151610d715f860182610cc3565b5060208301518482036020860152610d898282610cec565b91505060408301518482036040860152610da38282610cec565b9150506060830151610db86060860182610d4d565b508091505092915050565b5f610dce8383610d5c565b905092915050565b5f602082019050919050565b5f610dec82610d24565b610df68185610d2e565b935083602082028501610e0885610d3e565b805f5b85811015610e435784840389528151610e248582610dc3565b9450610e2f83610dd6565b925060208a01995050600181019050610e0b565b50829750879550505050505092915050565b5f606083015f830151610e6a5f860182610cc3565b5060208301518482036020860152610e828282610cec565b91505060408301518482036040860152610e9c8282610de2565b9150508091505092915050565b5f610eb48383610e55565b905092915050565b5f602082019050919050565b5f610ed282610c9a565b610edc8185610ca4565b935083602082028501610eee85610cb4565b805f5b85811015610f295784840389528151610f0a8582610ea9565b9450610f1583610ebc565b925060208a01995050600181019050610ef1565b50829750879550505050505092915050565b5f6020820190508181035f830152610f538184610ec8565b905092915050565b5f60208284031215610f7057610f6f610731565b5b5f610f7d84828501610bd2565b9150509291505056fe'
@@ -1,4 +1,4 @@
1
- import type { BatchMetaData } from '../types.js'
1
+ import type { BatchMetaData } from '../../types.js'
2
2
 
3
3
  const batchCurveUserVotes: BatchMetaData = {
4
4
  bytecode: {
package/src/index.ts CHANGED
@@ -56,9 +56,13 @@ export { default as getPendleApiData } from './strategies/pendle/getPendleApiDat
56
56
  ////////////////////////////////////////////////////////////////
57
57
  /// --- VOTEMARKET
58
58
 
59
+ // General
60
+ export { fetchCampaigns } from './votemarket/fetchCampaigns.js'
61
+
59
62
  // Curve
60
63
  export { fetchCurveGauges } from './votemarket/curve/fetchCurveGauges.js'
61
64
  export { fetchCurveUserVotes } from './votemarket/curve/fetchCurveUserVotes.js'
65
+ export { fetchSnapshotUserData } from './votemarket/curve/fetchSnapshotUserData.js'
62
66
 
63
67
  /// --- END VOTEMARKET
64
68
  ///////////////////////////////////////////////////////////////
@@ -1,6 +1,6 @@
1
1
  import { type Locker, ONE_YEAR, delegationWithId, lockers } from '@stake-dao/constants'
2
2
  import { formatUnits, parseAbi, zeroAddress } from 'viem'
3
- import { mainnet } from 'viem/chains'
3
+ import { fraxtal, mainnet } from 'viem/chains'
4
4
  import lockersMulticallAbi from '../../abis/lockersMulticall.js'
5
5
  import { Zero, getSdtInflationData } from '../../index.js'
6
6
  import type { Price } from '../../prices.js'
@@ -208,20 +208,30 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
208
208
  let bribeMaxApr = 0
209
209
  let bribeRewards: TBribesRewards | undefined = undefined
210
210
 
211
- if (chainId === mainnet.id) {
211
+ if (chainId === mainnet.id || chainId === fraxtal.id) {
212
+ let _workingSupply = gaugeWorkingSupply
213
+ let _veSdtTotalSupply = veSdtTotalSupply
214
+ let _veBalanceOfLocker = veBalanceOfLocker
215
+
216
+ if (locker.id === 'fxs') {
217
+ _workingSupply = httpCalls.sdfxsWorkingData.working_supply.toString()
218
+ _veSdtTotalSupply = BigInt(httpCalls.sdfxsWorkingData.veSDT_total_supply)
219
+ _veBalanceOfLocker = (httpCalls.sdfxsWorkingData.veBalance * 4).toString()
220
+ }
221
+
212
222
  const data = getBribesRewardsData(
213
223
  locker,
214
224
  httpCalls.bribesData,
215
- veSdtTotalSupply,
225
+ _veSdtTotalSupply,
216
226
  totalSupplyStaked,
217
- veBalanceOfLocker,
218
- gaugeWorkingSupply,
227
+ _veBalanceOfLocker,
228
+ _workingSupply,
219
229
  )
220
230
 
221
231
  bribeMinApr = data.bribeMinApr
222
232
  bribeMaxApr = data.bribeMaxApr
223
233
  bribeRewards = data.bribeRewards
224
- } else if (locker.id === 'cake' || locker.id === 'fxs') {
234
+ } else if (locker.id === 'cake') {
225
235
  let _veBalanceOfLocker = Number(veBalanceOfLocker)
226
236
 
227
237
  // Add sidechain veBalance
@@ -37,6 +37,7 @@ const getHttpCalls = async (chainId: number) => {
37
37
  case bsc.id: {
38
38
  const httpCalls = [
39
39
  (await fetch('https://raw.githubusercontent.com/stake-dao/bounties-report/main/delegationsAPRs.json')).json(),
40
+ (await fetch('https://api.stakedao.org/api/lockers/sdfxs-working-supply.json')).json(),
40
41
  ]
41
42
 
42
43
  const httpResponses = (await Promise.allSettled(httpCalls)).map((result) =>
@@ -44,8 +45,9 @@ const getHttpCalls = async (chainId: number) => {
44
45
  )
45
46
 
46
47
  const bribesData = httpResponses[0]
48
+ const sdfxsWorkingData = httpResponses[1]
47
49
 
48
- return { bribesData }
50
+ return { bribesData, sdfxsWorkingData }
49
51
  }
50
52
  }
51
53
 
@@ -84,17 +84,12 @@ export const buildCurveStrategies = async (
84
84
  )
85
85
  const decodedPromise = await Promise.allSettled(
86
86
  inputArgsChunks.map(async (inputArgs) => {
87
- const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType[chainId] || []) as any, [
88
- inputArgs,
89
- ])
90
- const contractCreationCode = concatBytecode(batchTokenData.bytecode[chainId]!, inputData)
87
+ const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType || []) as any, [inputArgs])
88
+ const contractCreationCode = concatBytecode(batchTokenData.bytecode, inputData)
91
89
  const returnedData = await provider.call({
92
90
  data: contractCreationCode,
93
91
  })
94
- return decodeAbiParameters(
95
- parseAbiParameters(batchTokenData.outputTypeHr[chainId] || []) as any,
96
- returnedData.data,
97
- )
92
+ return decodeAbiParameters(parseAbiParameters(batchTokenData.outputTypeHr || []) as any, returnedData.data)
98
93
  }),
99
94
  )
100
95
 
@@ -73,17 +73,12 @@ export const buildYearnStrategies = async (
73
73
  )
74
74
  const decodedPromise = await Promise.allSettled(
75
75
  tokensInputArgsChunks.map(async (inputArgs) => {
76
- const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType[chainId] || []) as any, [
77
- inputArgs,
78
- ])
79
- const contractCreationCode = concatBytecode(batchTokenData.bytecode[chainId]!, inputData)
76
+ const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType || []) as any, [inputArgs])
77
+ const contractCreationCode = concatBytecode(batchTokenData.bytecode, inputData)
80
78
  const returnedData = await provider.call({
81
79
  data: contractCreationCode,
82
80
  })
83
- return decodeAbiParameters(
84
- parseAbiParameters(batchTokenData.outputTypeHr[chainId] || []) as any,
85
- returnedData.data,
86
- )
81
+ return decodeAbiParameters(parseAbiParameters(batchTokenData.outputTypeHr || []) as any, returnedData.data)
87
82
  }),
88
83
  )
89
84
 
package/src/utils.ts CHANGED
@@ -212,3 +212,5 @@ export const multichainMulticall = async (calls: MultiChainCall[], abi: readonly
212
212
  chains.forEach((chainId, index) => (res[chainId] = promisesValues[index]))
213
213
  return res
214
214
  }
215
+
216
+ export const concatBytecode = (contract: string, args: string): string => contract.concat(args.slice(2))
@@ -1,6 +1,6 @@
1
1
  import { encodeAbiParameters, formatUnits, parseAbiParameters, zeroAddress } from 'viem'
2
2
  import { mainnet } from 'viem/chains'
3
- import batchCurveUserVotes from '../../bytecodes/votemarket/batchCurveUserVotes.js'
3
+ import batchCurveUserVotes from '../../bytecodes/votemarket/curve/batchCurveUserVotes.js'
4
4
  import { concatBytecode } from '../../index.js'
5
5
  import { batchJsonRpc, equalTlc } from '../../utils.js'
6
6
 
@@ -0,0 +1,114 @@
1
+ import snapshot from '@snapshot-labs/snapshot.js'
2
+ import { gql } from 'graphql-request'
3
+ import { isAddress } from 'viem'
4
+ import { graphql } from '../../utils.js'
5
+
6
+ interface SnapshotProposal {
7
+ id: string
8
+ title: string
9
+ start: number
10
+ end: number
11
+ state: string
12
+ choices: string[]
13
+ snapshot: string
14
+ space: {
15
+ strategies: SnapshotStrategy[]
16
+ }
17
+ }
18
+
19
+ interface ISnapshotUserData {
20
+ proposal: SnapshotProposal
21
+ vp: number
22
+ space: string
23
+ }
24
+
25
+ interface SnapshotStrategy {
26
+ name: string
27
+ network: string
28
+ params: any
29
+ }
30
+
31
+ const TITLE = 'Gauge Weight for Week of'
32
+
33
+ const SNAPSHOT_PROPOSAL_QUERY = (space: string) => gql`
34
+ query Proposals {
35
+ proposals (
36
+ first: 20
37
+ where: {
38
+ space: "${space}"
39
+ title_contains: "${TITLE}"
40
+ type: "weighted"
41
+ }
42
+ orderBy: "created"
43
+ orderDirection: desc
44
+ ){
45
+ id
46
+ title
47
+ start
48
+ end
49
+ state
50
+ snapshot
51
+ choices
52
+ space {
53
+ strategies {
54
+ name
55
+ network
56
+ params
57
+ }
58
+ }
59
+ }
60
+ }
61
+ `
62
+
63
+ export const fetchSnapshotUserData = async (
64
+ userAddress: string,
65
+ spaces: string[],
66
+ ): Promise<ISnapshotUserData[] | undefined> => {
67
+ if (spaces.length === 0) {
68
+ return undefined
69
+ }
70
+ const responses = await Promise.all(
71
+ spaces.map((space) => graphql('https://hub.snapshot.org/graphql', SNAPSHOT_PROPOSAL_QUERY(space))),
72
+ )
73
+
74
+ const results: ISnapshotUserData[] = []
75
+ for (let i = 0; i < responses.length; i++) {
76
+ const response = responses[i]
77
+
78
+ if (!response.proposals) {
79
+ return undefined
80
+ }
81
+ const proposals = response.proposals as SnapshotProposal[]
82
+
83
+ const proposal = proposals.find((proposal) => proposal.title.startsWith(TITLE))
84
+ if (!proposal) {
85
+ return undefined
86
+ }
87
+
88
+ // Fetch user voting power
89
+ let vp = 0
90
+ if (isAddress(userAddress)) {
91
+ const fetchedVp = await (snapshot as any).utils.getScores(
92
+ spaces[i],
93
+ proposal.space.strategies,
94
+ '1',
95
+ [userAddress],
96
+ Number.parseInt(proposal.snapshot),
97
+ )
98
+
99
+ for (const v of fetchedVp) {
100
+ if (v?.[userAddress]) {
101
+ vp += v?.[userAddress] || 0
102
+ }
103
+ }
104
+ }
105
+
106
+ results.push({
107
+ proposal,
108
+ space: spaces[i] as string,
109
+ vp,
110
+ })
111
+ }
112
+
113
+ return results
114
+ }
@@ -0,0 +1,115 @@
1
+ import { tokenWithAddress, tokens } from '@stake-dao/constants'
2
+ import { chunk, range, remove, uniq } from 'lodash-es'
3
+ import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
4
+ import { batchTokenData } from '../bytecodes/index.js'
5
+ import batchCampaigns from '../bytecodes/votemarket/batchCampaigns.js'
6
+ import { batchJsonRpc, concatBytecode, equalTlc, rpcCall } from '../utils.js'
7
+
8
+ export const CAMPAIGNS_CHUNK_SIZE = 10
9
+
10
+ interface FetchCampaignsProps {
11
+ platform: string
12
+ chainId: number
13
+ rpc: string
14
+ }
15
+
16
+ export type Gauge = {
17
+ gauge: string
18
+ inflationRate: string
19
+ relativeWeight: string
20
+ futureRelativeWeight: string
21
+ }
22
+
23
+ export type GaugesData = { totalGaugesWeight: string; gauges: Gauge[] }
24
+
25
+ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsProps): Promise<any> => {
26
+ const nCampaignsRequest = await rpcCall(rpc, [{ to: platform, data: '0x7274e30d' }]) // campaignCount
27
+ const nCampaigns = Number(
28
+ decodeAbiParameters([{ type: 'uint256', name: 'campaignCount' }], nCampaignsRequest[0].result),
29
+ )
30
+
31
+ const calls = range(0, nCampaigns, CAMPAIGNS_CHUNK_SIZE).map((skip) => {
32
+ const inputParams = [
33
+ platform,
34
+ skip,
35
+ skip + CAMPAIGNS_CHUNK_SIZE > nCampaigns ? nCampaigns : skip + CAMPAIGNS_CHUNK_SIZE,
36
+ ]
37
+
38
+ const inputData = encodeAbiParameters(parseAbiParameters(batchCampaigns.inputType[1]!) as any, inputParams)
39
+ return concatBytecode(batchCampaigns.bytecode[1]!, inputData)
40
+ })
41
+
42
+ const rawCampaigns = await batchJsonRpc({
43
+ rpc,
44
+ calls,
45
+ outputTypeAbi: batchCampaigns.outputType![1]!,
46
+ parse: false,
47
+ callsKey: `votemarket/fetchCampaigns.ts: rawCampaigns - chainId ${chainId} - rpc ${rpc}`,
48
+ })
49
+
50
+ const tokensToFetch: string[] = remove(
51
+ uniq(rawCampaigns.map((rc) => rc.campaign.rewardToken)),
52
+ (t) => !tokenWithAddress(t, chainId),
53
+ )
54
+
55
+ let rawTokensData: any[] = []
56
+ if (tokensToFetch.length > 0) {
57
+ const tokensChunks = chunk(tokensToFetch, 40)
58
+
59
+ const tokensCalls = tokensChunks.map((chunk) => {
60
+ const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType) as any, [chunk])
61
+ return concatBytecode(batchTokenData.bytecode, inputData)
62
+ })
63
+
64
+ rawTokensData = await batchJsonRpc({
65
+ rpc,
66
+ calls: tokensCalls,
67
+ outputTypeAbi: batchTokenData.outputTypeHr,
68
+ callsKey: `votemarket/fetchCampaigns.ts: rawTokensData - chainId ${chainId} - rpc ${rpc}`,
69
+ })
70
+ }
71
+
72
+ const fetchedTokens = [
73
+ ...tokens,
74
+ ...rawTokensData.map((t) => ({
75
+ name: t.name,
76
+ symbol: t.symbol,
77
+ address: t.tokenAddress,
78
+ decimals: Number(t.decimals),
79
+ chainId,
80
+ })),
81
+ ]
82
+
83
+ const campaigns = rawCampaigns.map((rc) => {
84
+ const rewardToken = fetchedTokens.find((t) => equalTlc(t.address, rc.campaign.rewardToken) && t.chainId === chainId)
85
+ const decimals = rewardToken ? rewardToken.decimals : 18
86
+
87
+ return {
88
+ id: Number(rc.id),
89
+ chainId: Number(rc.campaign.chainId),
90
+ gauge: rc.campaign.gauge,
91
+ manager: rc.campaign.manager,
92
+ rewardToken,
93
+ numberOfPeriods: Number(rc.campaign.numberOfPeriods),
94
+ maxRewardPerVote: formatUnits(rc.campaign.maxRewardPerVote, decimals),
95
+ totalRewardAmount: formatUnits(rc.campaign.totalRewardAmount, decimals),
96
+ totalDistributed: formatUnits(rc.campaign.totalDistributed, decimals),
97
+ startTimestamp: Number(rc.campaign.startTimestamp),
98
+ endTimestamp: Number(rc.campaign.endTimestamp),
99
+ hook: rc.campaign.hook,
100
+ isKilled: rc.isKilled,
101
+ addresses: rc.addresses,
102
+ isWhitelist: rc.isWhitelistOnly,
103
+ isBlacklist: !rc.isWhitelistOnly && rc.addresses.length > 0,
104
+ currentPeriod: {
105
+ rewardPerPeriod: formatUnits(rc.currentPeriod.rewardPerPeriod, decimals),
106
+ rewardPerVote: formatUnits(rc.currentPeriod.rewardPerVote, decimals),
107
+ leftover: formatUnits(rc.currentPeriod.leftover, decimals),
108
+ updated: rc.currentPeriod.updated,
109
+ },
110
+ periodLeft: Number(rc.periodLeft),
111
+ }
112
+ })
113
+
114
+ return campaigns
115
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveGauges.js","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveGauges.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAkB;IACtC,QAAQ,EAAE;QACR,CAAC,EAAE,krKAAkrK;KACtrK;IACD,SAAS,EAAE;QACT,CAAC,EAAE,CAAC,4BAA4B,CAAC;KAClC;IACD,YAAY,EAAE;QACZ,CAAC,EAAE;YACD,gCAAgC;YAChC,4IAA4I;SAC7I;KACF;IACD,UAAU,EAAE;QACV,CAAC,EAAE;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE;oBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE;oBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;iBACrC;aACF;SACF;KACF;CACF,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveGaugesMetadata.js","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveGaugesMetadata.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAClB,shTAAshT,CAAA;AAExhT,MAAM,eAAe,GACnB,4jUAA4jU,CAAA;AAE9jU,MAAM,eAAe,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAE5C,MAAM,kBAAkB,GAAG;IACzB,yBAAyB;IACzB,8DAA8D;IAC9D,kFAAkF;CACnF,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;YAClC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;oBACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;oBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;iBACtC;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;oBACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;oBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;iBACtC;aACF;SACF;KACF;CACF,CAAA;AAED,0BAA0B;AAC1B,iCAAiC;AACjC,MAAM,wBAAwB,GAAkB;IAC9C,QAAQ,EAAE;QACR,CAAC,EAAE,cAAc;QACjB,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,eAAe;KACvB;IACD,SAAS,EAAE;QACT,CAAC,EAAE,eAAe;KACnB;IACD,YAAY,EAAE;QACZ,CAAC,EAAE,kBAAkB;KACtB;IACD,UAAU,EAAE;QACV,CAAC,EAAE,gBAAgB;KACpB;CACF,CAAA;AAED,eAAe,wBAAwB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveOldLps.js","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveOldLps.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAClB,kxPAAkxP,CAAA;AAEpxP,MAAM,eAAe,GAAG,CAAC,iDAAiD,CAAC,CAAA;AAE3E,MAAM,kBAAkB,GAAG;IACzB,yBAAyB;IACzB,sEAAsE;IACtE,kFAAkF;CACnF,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YACtC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;YAChC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;oBACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;oBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;iBACtC;aACF;SACF;KACF;CACF,CAAA;AAED,0BAA0B;AAC1B,iCAAiC;AACjC,MAAM,gBAAgB,GAAkB;IACtC,QAAQ,EAAE;QACR,CAAC,EAAE,cAAc;KAClB;IACD,SAAS,EAAE;QACT,CAAC,EAAE,eAAe;KACnB;IACD,YAAY,EAAE;QACZ,CAAC,EAAE,kBAAkB;KACtB;IACD,UAAU,EAAE;QACV,CAAC,EAAE,gBAAgB;KACpB;CACF,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveUserVotes.js","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveUserVotes.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAkB;IACzC,QAAQ,EAAE;QACR,CAAC,EAAE,8yJAA8yJ;KAClzJ;IACD,SAAS,EAAE;QACT,CAAC,EAAE,CAAC,cAAc,CAAC;KACpB;IACD,YAAY,EAAE;QACZ,CAAC,EAAE;YACD,8BAA8B;YAC9B,wDAAwD;YACxD,0FAA0F;SAC3F;KACF;IACD,UAAU,EAAE;QACV,CAAC,EAAE;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;oBACtC;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,OAAO;wBACb,UAAU,EAAE;4BACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;4BAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;4BAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;4BAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;4BAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;yBACjC;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAA;AAED,eAAe,mBAAmB,CAAA"}
@@ -1,4 +0,0 @@
1
- import type { BatchMetaData } from '../types.js';
2
- declare const batchCurveGauges: BatchMetaData;
3
- export default batchCurveGauges;
4
- //# sourceMappingURL=batchCurveGauges.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveGauges.d.ts","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveGauges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,QAAA,MAAM,gBAAgB,EAAE,aA6BvB,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1,4 +0,0 @@
1
- import type { BatchMetaData } from '../types.js';
2
- declare const batchCurveGaugesMetadata: BatchMetaData;
3
- export default batchCurveGaugesMetadata;
4
- //# sourceMappingURL=batchCurveGaugesMetadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveGaugesMetadata.d.ts","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveGaugesMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAgDhD,QAAA,MAAM,wBAAwB,EAAE,aAgB/B,CAAA;AAED,eAAe,wBAAwB,CAAA"}
@@ -1,4 +0,0 @@
1
- import type { BatchMetaData } from '../types.js';
2
- declare const batchCurveOldLps: BatchMetaData;
3
- export default batchCurveOldLps;
4
- //# sourceMappingURL=batchCurveOldLps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveOldLps.d.ts","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveOldLps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAoChD,QAAA,MAAM,gBAAgB,EAAE,aAavB,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1,4 +0,0 @@
1
- import type { BatchMetaData } from '../types.js';
2
- declare const batchCurveUserVotes: BatchMetaData;
3
- export default batchCurveUserVotes;
4
- //# sourceMappingURL=batchCurveUserVotes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batchCurveUserVotes.d.ts","sourceRoot":"","sources":["../../../../src/bytecodes/votemarket/batchCurveUserVotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,QAAA,MAAM,mBAAmB,EAAE,aAoC1B,CAAA;AAED,eAAe,mBAAmB,CAAA"}