@stake-dao/reader 0.4.27 → 0.4.28

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 (84) hide show
  1. package/dist/esm/bytecodes/votemarket/batchCampaigns.js +11 -1
  2. package/dist/esm/bytecodes/votemarket/batchCampaigns.js.map +1 -1
  3. package/dist/esm/bytecodes/votemarket/batchClaimableData.js +21 -0
  4. package/dist/esm/bytecodes/votemarket/batchClaimableData.js.map +1 -0
  5. package/dist/esm/bytecodes/votemarket/batchGaugesWeight.js +13 -0
  6. package/dist/esm/bytecodes/votemarket/batchGaugesWeight.js.map +1 -0
  7. package/dist/esm/bytecodes/votemarket/batchVotes.js +13 -0
  8. package/dist/esm/bytecodes/votemarket/batchVotes.js.map +1 -0
  9. package/dist/esm/bytecodes/votemarket/curve/batchCurveGaugesMetadata.js +4 -3
  10. package/dist/esm/bytecodes/votemarket/curve/batchCurveGaugesMetadata.js.map +1 -1
  11. package/dist/esm/index.js +7 -0
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/strategies/pancakeswap/endpoints.js +1 -1
  14. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  15. package/dist/esm/utils.js +43 -1
  16. package/dist/esm/utils.js.map +1 -1
  17. package/dist/esm/votemarket/curve/config.js +1 -1
  18. package/dist/esm/votemarket/curve/fetchCurveGauges.js +2 -0
  19. package/dist/esm/votemarket/curve/fetchCurveGauges.js.map +1 -1
  20. package/dist/esm/votemarket/curve/fetchSnapshotUserData.js.map +1 -1
  21. package/dist/esm/votemarket/fetchCampaigns.js +95 -10
  22. package/dist/esm/votemarket/fetchCampaigns.js.map +1 -1
  23. package/dist/esm/votemarket/fetchClaimableData.js +36 -0
  24. package/dist/esm/votemarket/fetchClaimableData.js.map +1 -0
  25. package/dist/esm/votemarket/fetchEpochVotes.js +30 -0
  26. package/dist/esm/votemarket/fetchEpochVotes.js.map +1 -0
  27. package/dist/esm/votemarket/generateProofs/config.js +53 -0
  28. package/dist/esm/votemarket/generateProofs/config.js.map +1 -0
  29. package/dist/esm/votemarket/generateProofs/getBlockProof.js +33 -0
  30. package/dist/esm/votemarket/generateProofs/getBlockProof.js.map +1 -0
  31. package/dist/esm/votemarket/generateProofs/getGaugeProof.js +50 -0
  32. package/dist/esm/votemarket/generateProofs/getGaugeProof.js.map +1 -0
  33. package/dist/esm/votemarket/generateProofs/getUserProof.js +49 -0
  34. package/dist/esm/votemarket/generateProofs/getUserProof.js.map +1 -0
  35. package/dist/types/bytecodes/votemarket/batchCampaigns.d.ts.map +1 -1
  36. package/dist/types/bytecodes/votemarket/batchClaimableData.d.ts +4 -0
  37. package/dist/types/bytecodes/votemarket/batchClaimableData.d.ts.map +1 -0
  38. package/dist/types/bytecodes/votemarket/batchGaugesWeight.d.ts +4 -0
  39. package/dist/types/bytecodes/votemarket/batchGaugesWeight.d.ts.map +1 -0
  40. package/dist/types/bytecodes/votemarket/batchVotes.d.ts +4 -0
  41. package/dist/types/bytecodes/votemarket/batchVotes.d.ts.map +1 -0
  42. package/dist/types/bytecodes/votemarket/curve/batchCurveGaugesMetadata.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +5 -0
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/utils.d.ts +13 -0
  46. package/dist/types/utils.d.ts.map +1 -1
  47. package/dist/types/votemarket/curve/config.d.ts +1 -1
  48. package/dist/types/votemarket/curve/fetchCurveGauges.d.ts.map +1 -1
  49. package/dist/types/votemarket/curve/fetchSnapshotUserData.d.ts.map +1 -1
  50. package/dist/types/votemarket/fetchCampaigns.d.ts.map +1 -1
  51. package/dist/types/votemarket/fetchClaimableData.d.ts +6 -0
  52. package/dist/types/votemarket/fetchClaimableData.d.ts.map +1 -0
  53. package/dist/types/votemarket/fetchEpochVotes.d.ts +9 -0
  54. package/dist/types/votemarket/fetchEpochVotes.d.ts.map +1 -0
  55. package/dist/types/votemarket/generateProofs/config.d.ts +32 -0
  56. package/dist/types/votemarket/generateProofs/config.d.ts.map +1 -0
  57. package/dist/types/votemarket/generateProofs/getBlockProof.d.ts +6 -0
  58. package/dist/types/votemarket/generateProofs/getBlockProof.d.ts.map +1 -0
  59. package/dist/types/votemarket/generateProofs/getGaugeProof.d.ts +6 -0
  60. package/dist/types/votemarket/generateProofs/getGaugeProof.d.ts.map +1 -0
  61. package/dist/types/votemarket/generateProofs/getUserProof.d.ts +6 -0
  62. package/dist/types/votemarket/generateProofs/getUserProof.d.ts.map +1 -0
  63. package/dist/types/votemarket/types.d.ts +31 -8
  64. package/dist/types/votemarket/types.d.ts.map +1 -1
  65. package/package.json +1 -1
  66. package/src/bytecodes/votemarket/batchCampaigns.ts +11 -1
  67. package/src/bytecodes/votemarket/batchClaimableData.ts +24 -0
  68. package/src/bytecodes/votemarket/batchGaugesWeight.ts +15 -0
  69. package/src/bytecodes/votemarket/batchVotes.ts +15 -0
  70. package/src/bytecodes/votemarket/curve/batchCurveGaugesMetadata.ts +4 -3
  71. package/src/index.ts +10 -0
  72. package/src/strategies/pancakeswap/endpoints.ts +1 -1
  73. package/src/utils.ts +66 -1
  74. package/src/votemarket/curve/config.ts +1 -1
  75. package/src/votemarket/curve/fetchCurveGauges.ts +3 -0
  76. package/src/votemarket/curve/fetchSnapshotUserData.ts +1 -0
  77. package/src/votemarket/fetchCampaigns.ts +125 -11
  78. package/src/votemarket/fetchClaimableData.ts +50 -0
  79. package/src/votemarket/fetchEpochVotes.ts +48 -0
  80. package/src/votemarket/generateProofs/config.ts +53 -0
  81. package/src/votemarket/generateProofs/getBlockProof.ts +48 -0
  82. package/src/votemarket/generateProofs/getGaugeProof.ts +75 -0
  83. package/src/votemarket/generateProofs/getUserProof.ts +74 -0
  84. package/src/votemarket/types.ts +36 -8
@@ -1,16 +1,16 @@
1
1
  import type { BatchMetaData } from '../../types.js'
2
2
 
3
3
  const commonBytecode =
4
- '0x608060405234801561000f575f80fd5b5060405161130938038061130983398181016040528101906100319190610dd1565b5f815190505f8167ffffffffffffffff81111561005157610050610c3b565b5b60405190808252806020026020018201604052801561008a57816020015b610077610b9e565b81526020019060019003908161006f5790505b5090505f5b8281101561038f5761009f610b9e565b5f8583815181106100b3576100b2610e18565b5b6020026020010151905080825f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa15801561013e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101629190610e45565b90508083602001515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101ae816103be60201b60201c565b856020015160200186602001516040018760200151606001838152508390528390525050505f6101e3826105a360201b60201c565b90505f815190505f8167ffffffffffffffff81111561020557610204610c3b565b5b60405190808252806020026020018201604052801561023e57816020015b61022b610bda565b8152602001906001900390816102235790505b5090505f5b828110156103535783818151811061025e5761025d610e18565b5b602002602001015182828151811061027957610278610e18565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102df8482815181106102cc576102cb610e18565b5b60200260200101516103be60201b60201c565b8484815181106102f2576102f1610e18565b5b60200260200101516020018585815181106103105761030f610e18565b5b602002602001015160400186868151811061032e5761032d610e18565b5b6020026020010151606001838152508390528390525050508080600101915050610243565b508086604001819052508588888151811061037157610370610e18565b5b6020026020010181905250505050505050808060010191505061008f565b505f816040516020016103a29190611128565b6040516020818303038152906040529050602081018059038082f35b6060805f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561043e575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561059c575f8490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561048f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906104b791906111ea565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610501573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061052991906111ea565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610574573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610598919061125b565b9150505b9193909250565b60605f600467ffffffffffffffff8111156105c1576105c0610c3b565b5b6040519080825280602002602001820160405280156105ef5781602001602082028036833780820191505090505b5090505f808473ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527fa980497e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161069b91906112ca565b5f60405180830381855afa9150503d805f81146106d3576040519150601f19603f3d011682016040523d82523d5f602084013e6106d8565b606091505b50915091508180156106ea57505f8151115b1561086f578473ffffffffffffffffffffffffffffffffffffffff1663765337b66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075c9190610e45565b835f8151811061076f5761076e610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff16632621db2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108169190610e45565b8360018151811061082a57610829610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050829350505050610b01565b5f808673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f07546172000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161091891906112ca565b5f60405180830381855afa9150503d805f8114610950576040519150601f19603f3d011682016040523d82523d5f602084013e610955565b606091505b509150915081801561096757505f8151115b1561097e5761097b81610b0660201b60201c565b96505b61098e875f610b1360201b60201c565b855f815181106109a1576109a0610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506109ec876001610b1360201b60201c565b85600181518110610a00576109ff610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610a4b876002610b1360201b60201c565b85600281518110610a5f57610a5e610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610aaa876003610b1360201b60201c565b85600381518110610abe57610abd610e18565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084955050505050505b919050565b5f60208201519050919050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b8152600401610b4d91906112ef565b602060405180830381865afa925050508015610b8757506040513d601f19601f82011682018060405250810190610b849190610e45565b60015b610b93575f9050610b98565b809150505b92915050565b60405180606001604052805f73ffffffffffffffffffffffffffffffffffffffff168152602001610bcd610bda565b8152602001606081525090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610c7182610c2b565b810181811067ffffffffffffffff82111715610c9057610c8f610c3b565b5b80604052505050565b5f610ca2610c16565b9050610cae8282610c68565b919050565b5f67ffffffffffffffff821115610ccd57610ccc610c3b565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d0b82610ce2565b9050919050565b610d1b81610d01565b8114610d25575f80fd5b50565b5f81519050610d3681610d12565b92915050565b5f610d4e610d4984610cb3565b610c99565b90508083825260208201905060208402830185811115610d7157610d70610cde565b5b835b81811015610d9a5780610d868882610d28565b845260208401935050602081019050610d73565b5050509392505050565b5f82601f830112610db857610db7610c27565b5b8151610dc8848260208601610d3c565b91505092915050565b5f60208284031215610de657610de5610c1f565b5b5f82015167ffffffffffffffff811115610e0357610e02610c23565b5b610e0f84828501610da4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610e5a57610e59610c1f565b5b5f610e6784828501610d28565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610ea281610d01565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610eda82610ea8565b610ee48185610eb2565b9350610ef4818560208601610ec2565b610efd81610c2b565b840191505092915050565b5f819050919050565b610f1a81610f08565b82525050565b5f608083015f830151610f355f860182610e99565b5060208301518482036020860152610f4d8282610ed0565b91505060408301518482036040860152610f678282610ed0565b9150506060830151610f7c6060860182610f11565b508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610fbb8383610f20565b905092915050565b5f602082019050919050565b5f610fd982610f87565b610fe38185610f91565b935083602082028501610ff585610fa1565b805f5b8581101561103057848403895281516110118582610fb0565b945061101c83610fc3565b925060208a01995050600181019050610ff8565b50829750879550505050505092915050565b5f606083015f8301516110575f860182610e99565b506020830151848203602086015261106f8282610f20565b915050604083015184820360408601526110898282610fcf565b9150508091505092915050565b5f6110a18383611042565b905092915050565b5f602082019050919050565b5f6110bf82610e70565b6110c98185610e7a565b9350836020820285016110db85610e8a565b805f5b8581101561111657848403895281516110f78582611096565b9450611102836110a9565b925060208a019950506001810190506110de565b50829750879550505050505092915050565b5f6020820190508181035f83015261114081846110b5565b905092915050565b5f80fd5b5f67ffffffffffffffff82111561116657611165610c3b565b5b61116f82610c2b565b9050602081019050919050565b5f61118e6111898461114c565b610c99565b9050828152602081018484840111156111aa576111a9611148565b5b6111b5848285610ec2565b509392505050565b5f82601f8301126111d1576111d0610c27565b5b81516111e184826020860161117c565b91505092915050565b5f602082840312156111ff576111fe610c1f565b5b5f82015167ffffffffffffffff81111561121c5761121b610c23565b5b611228848285016111bd565b91505092915050565b61123a81610f08565b8114611244575f80fd5b50565b5f8151905061125581611231565b92915050565b5f602082840312156112705761126f610c1f565b5b5f61127d84828501611247565b91505092915050565b5f81519050919050565b5f81905092915050565b5f6112a482611286565b6112ae8185611290565b93506112be818560208601610ec2565b80840191505092915050565b5f6112d5828461129a565b915081905092915050565b6112e981610f08565b82525050565b5f6020820190506113025f8301846112e0565b9291505056fe'
4
+ '0x608060405234801561000f575f80fd5b506040516113fd3803806113fd83398181016040528101906100319190610eb2565b5f815190505f8167ffffffffffffffff81111561005157610050610d1c565b5b60405190808252806020026020018201604052801561008a57816020015b610077610c63565b81526020019060019003908161006f5790505b5090505f5b828110156103d55761009f610c63565b5f8583815181106100b3576100b2610ef9565b5b6020026020010151905080825f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101038161040460201b60201c565b826020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610184573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a89190610f26565b90508083604001515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101f48161048360201b60201c565b856040015160200186604001516040018760400151606001838152508390528390525050505f6102298261066860201b60201c565b90505f815190505f8167ffffffffffffffff81111561024b5761024a610d1c565b5b60405190808252806020026020018201604052801561028457816020015b610271610cbb565b8152602001906001900390816102695790505b5090505f5b82811015610399578381815181106102a4576102a3610ef9565b5b60200260200101518282815181106102bf576102be610ef9565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061032584828151811061031257610311610ef9565b5b602002602001015161048360201b60201c565b84848151811061033857610337610ef9565b5b602002602001015160200185858151811061035657610355610ef9565b5b602002602001015160400186868151811061037457610373610ef9565b5b6020026020010151606001838152508390528390525050508080600101915050610289565b50808660600181905250858888815181106103b7576103b6610ef9565b5b6020026020010181905250505050505050808060010191505061008f565b505f816040516020016103e8919061121c565b6040516020818303038152906040529050602081018059038082f35b5f8173ffffffffffffffffffffffffffffffffffffffff1663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561046d57506040513d601f19601f8201168201806040525081019061046a9190610f26565b60015b610479575f905061047e565b809150505b919050565b6060805f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610503575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15610661575f8490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610554573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061057c91906112de565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156105c6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105ee91906112de565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610639573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065d919061134f565b9150505b9193909250565b60605f600467ffffffffffffffff81111561068657610685610d1c565b5b6040519080825280602002602001820160405280156106b45781602001602082028036833780820191505090505b5090505f808473ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527fa980497e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161076091906113be565b5f60405180830381855afa9150503d805f8114610798576040519150601f19603f3d011682016040523d82523d5f602084013e61079d565b606091505b50915091508180156107af57505f8151115b15610934578473ffffffffffffffffffffffffffffffffffffffff1663765337b66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108219190610f26565b835f8151811061083457610833610ef9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff16632621db2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108db9190610f26565b836001815181106108ef576108ee610ef9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050829350505050610bc6565b5f808673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f07546172000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516109dd91906113be565b5f60405180830381855afa9150503d805f8114610a15576040519150601f19603f3d011682016040523d82523d5f602084013e610a1a565b606091505b5091509150818015610a2c57505f8151115b15610a4357610a4081610bcb60201b60201c565b96505b610a53875f610bd860201b60201c565b855f81518110610a6657610a65610ef9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610ab1876001610bd860201b60201c565b85600181518110610ac557610ac4610ef9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610b10876002610bd860201b60201c565b85600281518110610b2457610b23610ef9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610b6f876003610bd860201b60201c565b85600381518110610b8357610b82610ef9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084955050505050505b919050565b5f60208201519050919050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b8152600401610c1291906113e3565b602060405180830381865afa925050508015610c4c57506040513d601f19601f82011682018060405250810190610c499190610f26565b60015b610c58575f9050610c5d565b809150505b92915050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001610cae610cbb565b8152602001606081525090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d5282610d0c565b810181811067ffffffffffffffff82111715610d7157610d70610d1c565b5b80604052505050565b5f610d83610cf7565b9050610d8f8282610d49565b919050565b5f67ffffffffffffffff821115610dae57610dad610d1c565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610dec82610dc3565b9050919050565b610dfc81610de2565b8114610e06575f80fd5b50565b5f81519050610e1781610df3565b92915050565b5f610e2f610e2a84610d94565b610d7a565b90508083825260208201905060208402830185811115610e5257610e51610dbf565b5b835b81811015610e7b5780610e678882610e09565b845260208401935050602081019050610e54565b5050509392505050565b5f82601f830112610e9957610e98610d08565b5b8151610ea9848260208601610e1d565b91505092915050565b5f60208284031215610ec757610ec6610d00565b5b5f82015167ffffffffffffffff811115610ee457610ee3610d04565b5b610ef084828501610e85565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610f3b57610f3a610d00565b5b5f610f4884828501610e09565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610f8381610de2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610fbb82610f89565b610fc58185610f93565b9350610fd5818560208601610fa3565b610fde81610d0c565b840191505092915050565b5f819050919050565b610ffb81610fe9565b82525050565b5f608083015f8301516110165f860182610f7a565b506020830151848203602086015261102e8282610fb1565b915050604083015184820360408601526110488282610fb1565b915050606083015161105d6060860182610ff2565b508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61109c8383611001565b905092915050565b5f602082019050919050565b5f6110ba82611068565b6110c48185611072565b9350836020820285016110d685611082565b805f5b8581101561111157848403895281516110f28582611091565b94506110fd836110a4565b925060208a019950506001810190506110d9565b50829750879550505050505092915050565b5f608083015f8301516111385f860182610f7a565b50602083015161114b6020860182610f7a565b50604083015184820360408601526111638282611001565b9150506060830151848203606086015261117d82826110b0565b9150508091505092915050565b5f6111958383611123565b905092915050565b5f602082019050919050565b5f6111b382610f51565b6111bd8185610f5b565b9350836020820285016111cf85610f6b565b805f5b8581101561120a57848403895281516111eb858261118a565b94506111f68361119d565b925060208a019950506001810190506111d2565b50829750879550505050505092915050565b5f6020820190508181035f83015261123481846111a9565b905092915050565b5f80fd5b5f67ffffffffffffffff82111561125a57611259610d1c565b5b61126382610d0c565b9050602081019050919050565b5f61128261127d84611240565b610d7a565b90508281526020810184848401111561129e5761129d61123c565b5b6112a9848285610fa3565b509392505050565b5f82601f8301126112c5576112c4610d08565b5b81516112d5848260208601611270565b91505092915050565b5f602082840312156112f3576112f2610d00565b5b5f82015167ffffffffffffffff8111156113105761130f610d04565b5b61131c848285016112b1565b91505092915050565b61132e81610fe9565b8114611338575f80fd5b50565b5f8151905061134981611325565b92915050565b5f6020828403121561136457611363610d00565b5b5f6113718482850161133b565b91505092915050565b5f81519050919050565b5f81905092915050565b5f6113988261137a565b6113a28185611384565b93506113b2818560208601610fa3565b80840191505092915050565b5f6113c9828461138e565b915081905092915050565b6113dd81610fe9565b82525050565b5f6020820190506113f65f8301846113d4565b9291505056fe'
5
5
 
6
6
  const oldSolcBytecode =
7
- '0x608060405234801561001057600080fd5b5060405161141c38038061141c83398181016040528101906100329190610e21565b60008151905060008167ffffffffffffffff81111561005457610053610c80565b5b60405190808252806020026020018201604052801561008d57816020015b61007a610bdb565b8152602001906001900390816100725790505b50905060005b828110156103aa576100a3610bdb565b60008583815181106100b8576100b7610e6a565b5b6020026020010151905080826000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016b9190610e99565b90508083602001516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101b8816103da60201b60201c565b8560200151602001866020015160400187602001516060018381525083905283905250505060006101ee826105cb60201b60201c565b905060008151905060008167ffffffffffffffff81111561021257610211610c80565b5b60405190808252806020026020018201604052801561024b57816020015b610238610c18565b8152602001906001900390816102305790505b50905060005b828110156103685783818151811061026c5761026b610e6a565b5b602002602001015182828151811061028757610286610e6a565b5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102ee8482815181106102db576102da610e6a565b5b60200260200101516103da60201b60201c565b84848151811061030157610300610e6a565b5b602002602001015160200185858151811061031f5761031e610e6a565b5b602002602001015160400186868151811061033d5761033c610e6a565b5b602002602001015160600183815250839052839052505050808061036090610eff565b915050610251565b508086604001819052508588888151811061038657610385610e6a565b5b602002602001018190525050505050505080806103a290610eff565b915050610093565b506000816040516020016103be9190611229565b6040516020818303038152906040529050602081018059038082f35b60608060008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561045b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156105c45760008490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156104b0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104d991906112f1565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610526573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061054f91906112f1565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561059c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c09190611366565b9150505b9193909250565b60606000600467ffffffffffffffff8111156105ea576105e9610c80565b5b6040519080825280602002602001820160405280156106185781602001602082028036833780820191505090505b5090506000808473ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527fa980497e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516106c591906113da565b600060405180830381855afa9150503d8060008114610700576040519150601f19603f3d011682016040523d82523d6000602084013e610705565b606091505b5091509150818015610718575060008151115b156108a2578473ffffffffffffffffffffffffffffffffffffffff1663765337b66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c9190610e99565b836000815181106107a05761079f610e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff16632621db2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108499190610e99565b8360018151811061085d5761085c610e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050829350505050610b3b565b6000808673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f07546172000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161094c91906113da565b600060405180830381855afa9150503d8060008114610987576040519150601f19603f3d011682016040523d82523d6000602084013e61098c565b606091505b509150915081801561099f575060008151115b156109b6576109b381610b4060201b60201c565b96505b6109c7876000610b4e60201b60201c565b856000815181106109db576109da610e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610a26876001610b4e60201b60201c565b85600181518110610a3a57610a39610e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610a85876002610b4e60201b60201c565b85600281518110610a9957610a98610e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610ae4876003610b4e60201b60201c565b85600381518110610af857610af7610e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084955050505050505b919050565b600060208201519050919050565b60008273ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b8152600401610b899190611400565b602060405180830381865afa925050508015610bc357506040513d601f19601f82011682018060405250810190610bc09190610e99565b60015b610bd05760009050610bd5565b809150505b92915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001610c0b610c18565b8152602001606081525090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610cb882610c6f565b810181811067ffffffffffffffff82111715610cd757610cd6610c80565b5b80604052505050565b6000610cea610c56565b9050610cf68282610caf565b919050565b600067ffffffffffffffff821115610d1657610d15610c80565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d5782610d2c565b9050919050565b610d6781610d4c565b8114610d7257600080fd5b50565b600081519050610d8481610d5e565b92915050565b6000610d9d610d9884610cfb565b610ce0565b90508083825260208201905060208402830185811115610dc057610dbf610d27565b5b835b81811015610de95780610dd58882610d75565b845260208401935050602081019050610dc2565b5050509392505050565b600082601f830112610e0857610e07610c6a565b5b8151610e18848260208601610d8a565b91505092915050565b600060208284031215610e3757610e36610c60565b5b600082015167ffffffffffffffff811115610e5557610e54610c65565b5b610e6184828501610df3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215610eaf57610eae610c60565b5b6000610ebd84828501610d75565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610f0a82610ef5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f3c57610f3b610ec6565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f7c81610d4c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fbc578082015181840152602081019050610fa1565b60008484015250505050565b6000610fd382610f82565b610fdd8185610f8d565b9350610fed818560208601610f9e565b610ff681610c6f565b840191505092915050565b61100a81610ef5565b82525050565b60006080830160008301516110286000860182610f73565b50602083015184820360208601526110408282610fc8565b9150506040830151848203604086015261105a8282610fc8565b915050606083015161106f6060860182611001565b508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006110b28383611010565b905092915050565b6000602082019050919050565b60006110d28261107a565b6110dc8185611085565b9350836020820285016110ee85611096565b8060005b8581101561112a578484038952815161110b85826110a6565b9450611116836110ba565b925060208a019950506001810190506110f2565b50829750879550505050505092915050565b60006060830160008301516111546000860182610f73565b506020830151848203602086015261116c8282611010565b9150506040830151848203604086015261118682826110c7565b9150508091505092915050565b600061119f838361113c565b905092915050565b6000602082019050919050565b60006111bf82610f47565b6111c98185610f52565b9350836020820285016111db85610f63565b8060005b8581101561121757848403895281516111f88582611193565b9450611203836111a7565b925060208a019950506001810190506111df565b50829750879550505050505092915050565b6000602082019050818103600083015261124381846111b4565b905092915050565b600080fd5b600067ffffffffffffffff82111561126b5761126a610c80565b5b61127482610c6f565b9050602081019050919050565b600061129461128f84611250565b610ce0565b9050828152602081018484840111156112b0576112af61124b565b5b6112bb848285610f9e565b509392505050565b600082601f8301126112d8576112d7610c6a565b5b81516112e8848260208601611281565b91505092915050565b60006020828403121561130757611306610c60565b5b600082015167ffffffffffffffff81111561132557611324610c65565b5b611331848285016112c3565b91505092915050565b61134381610ef5565b811461134e57600080fd5b50565b6000815190506113608161133a565b92915050565b60006020828403121561137c5761137b610c60565b5b600061138a84828501611351565b91505092915050565b600081519050919050565b600081905092915050565b60006113b482611393565b6113be818561139e565b93506113ce818560208601610f9e565b80840191505092915050565b60006113e682846113a9565b915081905092915050565b6113fa81610ef5565b82525050565b600060208201905061141560008301846113f1565b9291505056fe'
7
+ '0x608060405234801561001057600080fd5b5060405161151338038061151383398181016040528101906100329190610f05565b60008151905060008167ffffffffffffffff81111561005457610053610d64565b5b60405190808252806020026020018201604052801561008d57816020015b61007a610ca2565b8152602001906001900390816100725790505b50905060005b828110156103f0576100a3610ca2565b60008583815181106100b8576100b7610f4e565b5b6020026020010151905080826000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101098161042060201b60201c565b826020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190610f7d565b90508083604001516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101fe816104a160201b60201c565b8560400151602001866040015160400187604001516060018381525083905283905250505060006102348261069260201b60201c565b905060008151905060008167ffffffffffffffff81111561025857610257610d64565b5b60405190808252806020026020018201604052801561029157816020015b61027e610cfc565b8152602001906001900390816102765790505b50905060005b828110156103ae578381815181106102b2576102b1610f4e565b5b60200260200101518282815181106102cd576102cc610f4e565b5b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061033484828151811061032157610320610f4e565b5b60200260200101516104a160201b60201c565b84848151811061034757610346610f4e565b5b602002602001015160200185858151811061036557610364610f4e565b5b602002602001015160400186868151811061038357610382610f4e565b5b60200260200101516060018381525083905283905250505080806103a690610fe3565b915050610297565b50808660600181905250858888815181106103cc576103cb610f4e565b5b602002602001018190525050505050505080806103e890610fe3565b915050610093565b506000816040516020016104049190611320565b6040516020818303038152906040529050602081018059038082f35b60008173ffffffffffffffffffffffffffffffffffffffff1663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561048a57506040513d601f19601f820116820180604052508101906104879190610f7d565b60015b610497576000905061049c565b809150505b919050565b60608060008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610522575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561068b5760008490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610577573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105a091906113e8565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061061691906113e8565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061145d565b9150505b9193909250565b60606000600467ffffffffffffffff8111156106b1576106b0610d64565b5b6040519080825280602002602001820160405280156106df5781602001602082028036833780820191505090505b5090506000808473ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527fa980497e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161078c91906114d1565b600060405180830381855afa9150503d80600081146107c7576040519150601f19603f3d011682016040523d82523d6000602084013e6107cc565b606091505b50915091508180156107df575060008151115b15610969578473ffffffffffffffffffffffffffffffffffffffff1663765337b66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108539190610f7d565b8360008151811061086757610866610f4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff16632621db2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109109190610f7d565b8360018151811061092457610923610f4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050829350505050610c02565b6000808673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f07546172000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1391906114d1565b600060405180830381855afa9150503d8060008114610a4e576040519150601f19603f3d011682016040523d82523d6000602084013e610a53565b606091505b5091509150818015610a66575060008151115b15610a7d57610a7a81610c0760201b60201c565b96505b610a8e876000610c1560201b60201c565b85600081518110610aa257610aa1610f4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610aed876001610c1560201b60201c565b85600181518110610b0157610b00610f4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610b4c876002610c1560201b60201c565b85600281518110610b6057610b5f610f4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610bab876003610c1560201b60201c565b85600381518110610bbf57610bbe610f4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084955050505050505b919050565b600060208201519050919050565b60008273ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b8152600401610c5091906114f7565b602060405180830381865afa925050508015610c8a57506040513d601f19601f82011682018060405250810190610c879190610f7d565b60015b610c975760009050610c9c565b809150505b92915050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001610cef610cfc565b8152602001606081525090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d9c82610d53565b810181811067ffffffffffffffff82111715610dbb57610dba610d64565b5b80604052505050565b6000610dce610d3a565b9050610dda8282610d93565b919050565b600067ffffffffffffffff821115610dfa57610df9610d64565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e3b82610e10565b9050919050565b610e4b81610e30565b8114610e5657600080fd5b50565b600081519050610e6881610e42565b92915050565b6000610e81610e7c84610ddf565b610dc4565b90508083825260208201905060208402830185811115610ea457610ea3610e0b565b5b835b81811015610ecd5780610eb98882610e59565b845260208401935050602081019050610ea6565b5050509392505050565b600082601f830112610eec57610eeb610d4e565b5b8151610efc848260208601610e6e565b91505092915050565b600060208284031215610f1b57610f1a610d44565b5b600082015167ffffffffffffffff811115610f3957610f38610d49565b5b610f4584828501610ed7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215610f9357610f92610d44565b5b6000610fa184828501610e59565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610fee82610fd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036110205761101f610faa565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61106081610e30565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156110a0578082015181840152602081019050611085565b60008484015250505050565b60006110b782611066565b6110c18185611071565b93506110d1818560208601611082565b6110da81610d53565b840191505092915050565b6110ee81610fd9565b82525050565b600060808301600083015161110c6000860182611057565b506020830151848203602086015261112482826110ac565b9150506040830151848203604086015261113e82826110ac565b915050606083015161115360608601826110e5565b508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061119683836110f4565b905092915050565b6000602082019050919050565b60006111b68261115e565b6111c08185611169565b9350836020820285016111d28561117a565b8060005b8581101561120e57848403895281516111ef858261118a565b94506111fa8361119e565b925060208a019950506001810190506111d6565b50829750879550505050505092915050565b60006080830160008301516112386000860182611057565b50602083015161124b6020860182611057565b506040830151848203604086015261126382826110f4565b9150506060830151848203606086015261127d82826111ab565b9150508091505092915050565b60006112968383611220565b905092915050565b6000602082019050919050565b60006112b68261102b565b6112c08185611036565b9350836020820285016112d285611047565b8060005b8581101561130e57848403895281516112ef858261128a565b94506112fa8361129e565b925060208a019950506001810190506112d6565b50829750879550505050505092915050565b6000602082019050818103600083015261133a81846112ab565b905092915050565b600080fd5b600067ffffffffffffffff82111561136257611361610d64565b5b61136b82610d53565b9050602081019050919050565b600061138b61138684611347565b610dc4565b9050828152602081018484840111156113a7576113a6611342565b5b6113b2848285611082565b509392505050565b600082601f8301126113cf576113ce610d4e565b5b81516113df848260208601611378565b91505092915050565b6000602082840312156113fe576113fd610d44565b5b600082015167ffffffffffffffff81111561141c5761141b610d49565b5b611428848285016113ba565b91505092915050565b61143a81610fd9565b811461144557600080fd5b50565b60008151905061145781611431565b92915050565b60006020828403121561147357611472610d44565b5b600061148184828501611448565b91505092915050565b600081519050919050565b600081905092915050565b60006114ab8261148a565b6114b58185611495565b93506114c5818560208601611082565b80840191505092915050565b60006114dd82846114a0565b915081905092915050565b6114f181610fd9565b82525050565b600060208201905061150c60008301846114e8565b9291505056fe'
8
8
 
9
9
  const commonInputType = ['address[] gauges']
10
10
 
11
11
  const commonOutputTypeHr = [
12
12
  'ReturnData[] returnData',
13
- 'struct ReturnData { address gauge; Token lp; Token[] coins }',
13
+ 'struct ReturnData { address gauge; address manager; Token lp; Token[] coins }',
14
14
  'struct Token { address _address; string name; string symbol; uint256 decimals; }',
15
15
  ]
16
16
 
@@ -20,6 +20,7 @@ const commonOutputType = [
20
20
  name: 'returnData',
21
21
  components: [
22
22
  { type: 'address', name: 'gauge' },
23
+ { type: 'address', name: 'manager' },
23
24
  {
24
25
  type: 'tuple',
25
26
  name: 'lp',
package/src/index.ts CHANGED
@@ -67,6 +67,16 @@ export { fetchCurveGauges } from './votemarket/curve/fetchCurveGauges.js'
67
67
  export { fetchCurveUserVotes } from './votemarket/curve/fetchCurveUserVotes.js'
68
68
  export { fetchSnapshotUserData } from './votemarket/curve/fetchSnapshotUserData.js'
69
69
 
70
+ // Campaign data
71
+ export { fetchEpochsVotes } from './votemarket/fetchEpochVotes.js'
72
+ export { fetchClaimableData } from './votemarket/fetchClaimableData.js'
73
+
74
+ // Proofs
75
+
76
+ export { generateBlockProof } from './votemarket/generateProofs/getBlockProof.js'
77
+ export { generateGaugeProof } from './votemarket/generateProofs/getGaugeProof.js'
78
+ export { generateUserProof } from './votemarket/generateProofs/getUserProof.js'
79
+
70
80
  /// --- END VOTEMARKET
71
81
  ///////////////////////////////////////////////////////////////
72
82
 
@@ -5,7 +5,7 @@ export const CHAINS_DENOMINATOR = {
5
5
  }
6
6
 
7
7
  export const PANCAKESWAP_FEE_URL = (version: string, chainId: number) => {
8
- return `https://explorer-api.pancakeswap.com/cached/pools/apr/${version}/${CHAINS_DENOMINATOR[chainId]}/farms-lp`
8
+ return `https://explorer.pancakeswap.com/api/cached/pools/apr/${version}/${CHAINS_DENOMINATOR[chainId]}/farms-lp`
9
9
  }
10
10
 
11
11
  export const MANAGER_FEES_ENDPOINT =
package/src/utils.ts CHANGED
@@ -2,7 +2,7 @@ import { tokens } from '@stake-dao/constants'
2
2
  import type { Token } from '@stake-dao/constants'
3
3
  import { request } from 'graphql-request'
4
4
  import { groupBy } from 'lodash-es'
5
- import { http, createPublicClient, decodeAbiParameters, extractChain, parseAbiParameters } from 'viem'
5
+ import { http, createPublicClient, decodeAbiParameters, extractChain, parseAbiParameters, toHex } from 'viem'
6
6
  import * as viemChains from 'viem/chains'
7
7
  import { AGNOSTIC_QUERY_URL } from './endpoints.js'
8
8
  import { withTwoDec } from './number.js'
@@ -70,6 +70,26 @@ export const projectWorkingBalance = (veBalance: bigint, veTotal: bigint, balanc
70
70
  return [balance, derived + adjusted].reduce((m, e) => (e < m ? e : m))
71
71
  }
72
72
 
73
+ export const rpcGetLastBlockTimetstamp = async (rpc: string) => {
74
+ const request = await (
75
+ await fetch(rpc, {
76
+ method: 'POST',
77
+ headers: { 'Content-Type': 'application/json' },
78
+ body: JSON.stringify({
79
+ id: 0,
80
+ jsonrpc: '2.0',
81
+ method: 'eth_getBlockByNumber',
82
+ params: ['latest', false],
83
+ }),
84
+ })
85
+ ).json()
86
+
87
+ return {
88
+ number: Number(request.result.number),
89
+ timestamp: Number(request.result.timestamp),
90
+ }
91
+ }
92
+
73
93
  interface RpcCallArgs {
74
94
  to: string
75
95
  data: string
@@ -138,6 +158,51 @@ export const batchJsonRpc = async (args: BatchJsonRpcArgs) => {
138
158
  return rpcResults.flatMap((r) => (r.status === 'fulfilled' ? r.value[0] : []))
139
159
  }
140
160
 
161
+ interface BatchJsonRpcWithBlocksArgs {
162
+ rpc: string
163
+ call: string
164
+ outputTypeAbi: any | any[]
165
+ parse?: boolean
166
+ callsKey: string
167
+ blocks: number[]
168
+ }
169
+
170
+ export const batchJsonRpcWithBlocks = async (args: BatchJsonRpcWithBlocksArgs) => {
171
+ const { rpc, call, outputTypeAbi, parse = true, callsKey, blocks } = args
172
+
173
+ const rpcRequests = await (
174
+ await fetch(rpc, {
175
+ method: 'POST',
176
+ headers: { 'Content-Type': 'application/json' },
177
+ body: JSON.stringify(
178
+ blocks.map((block, index) => ({
179
+ id: index,
180
+ jsonrpc: '2.0',
181
+ method: 'eth_call',
182
+ params: [{ data: call }, toHex(block)],
183
+ })),
184
+ ),
185
+ })
186
+ ).json()
187
+
188
+ const rpcResults = rpcRequests.map((res: any, index: number) => {
189
+ const isError = Object.keys(res).includes('error')
190
+ const abi = Array.isArray(outputTypeAbi[0]) ? outputTypeAbi[index] : outputTypeAbi
191
+ const status = isError ? 'error' : 'fulfilled'
192
+ const value = isError
193
+ ? `${callsKey} call index ${index}: code ${res.error.code}\n${res.error.message}`
194
+ : decodeAbiParameters(parse ? (parseAbiParameters(abi) as any) : abi, res.result)
195
+
196
+ if (isError) {
197
+ console.error(value)
198
+ }
199
+
200
+ return { status, value }
201
+ })
202
+
203
+ return rpcResults.flatMap((r) => (r.status === 'fulfilled' ? r.value : []))
204
+ }
205
+
141
206
  export interface Call {
142
207
  address: string // Address of the contract
143
208
  name: string // Function name on the contract (example: balanceOf)
@@ -1,6 +1,6 @@
1
1
  import { lc } from '../../utils.js'
2
2
 
3
- export const GAUGES_CHUNK_SIZE = 35
3
+ export const GAUGES_CHUNK_SIZE = 30
4
4
  export const GAUGES_METADATA_CHUNK_SIZE = 10
5
5
 
6
6
  export const NOT_LP_GAUGES = {
@@ -7,6 +7,7 @@ import { concatBytecode } from '../../index.js'
7
7
  import { batchJsonRpc, equalTlc, rpcCall } from '../../utils.js'
8
8
  import { BROKEN_GAUGES, GAUGES_CHUNK_SIZE, GAUGES_METADATA_CHUNK_SIZE, NOT_LP_GAUGES_INDEX } from './config.js'
9
9
 
10
+ // TODO
10
11
  export type Gauge = {
11
12
  gauge: string
12
13
  inflationRate: string
@@ -116,6 +117,7 @@ export const fetchCurveGauges = async (rpc: Rpcs): Promise<GaugesData> => {
116
117
 
117
118
  return {
118
119
  gauge: g.gauge,
120
+ manager: gaugeMetadata.manager,
119
121
  name,
120
122
  weight: g.weight,
121
123
  relativeWeight: g.relativeWeight,
@@ -163,6 +165,7 @@ export const fetchCurveGauges = async (rpc: Rpcs): Promise<GaugesData> => {
163
165
  ...g,
164
166
  name: missingData ? missingData.name : g.name,
165
167
  coins,
168
+ inController: true,
166
169
  }
167
170
  })
168
171
 
@@ -67,6 +67,7 @@ export const fetchSnapshotUserData = async (
67
67
  if (spaces.length === 0) {
68
68
  return undefined
69
69
  }
70
+
70
71
  const responses = await Promise.all(
71
72
  spaces.map((space) => graphql('https://hub.snapshot.org/graphql', SNAPSHOT_PROPOSAL_QUERY(space))),
72
73
  )
@@ -1,11 +1,14 @@
1
- import { ONE_WEEK, tokenWithAddress, tokens } from '@stake-dao/constants'
1
+ import { ONE_WEEK, RPC, contracts, tokenWithAddress, tokens } from '@stake-dao/constants'
2
2
  import { chunk, filter, range, remove, uniq } from 'lodash-es'
3
- import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
3
+ import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters, zeroAddress } from 'viem'
4
+ import { mainnet } from 'viem/chains'
4
5
  import { batchTokenData } from '../bytecodes/index.js'
5
6
  import batchCampaigns from '../bytecodes/votemarket/batchCampaigns.js'
7
+ import batchGaugesWeight from '../bytecodes/votemarket/batchGaugesWeight.js'
6
8
  import { getPrices } from '../prices.js'
7
- import { batchJsonRpc, concatBytecode, equalTlc, rpcCall } from '../utils.js'
8
- import type { Campaign } from './types.js'
9
+ import { Zero } from '../strategies/utils/index.js'
10
+ import { batchJsonRpc, concatBytecode, equalTlc, rpcCall, rpcGetLastBlockTimetstamp } from '../utils.js'
11
+ import type { Campaign, RawCampaign, RawPeriod } from './types.js'
9
12
 
10
13
  export const CAMPAIGNS_CHUNK_SIZE = 10
11
14
  export const CLAIM_WINDOW_LENGTH = 24 // weeks
@@ -17,7 +20,68 @@ interface FetchCampaignsProps {
17
20
  rpc: string
18
21
  }
19
22
 
23
+ const updateEpoch = ({
24
+ period,
25
+ previousPeriod,
26
+ campaign,
27
+ totalVotes,
28
+ remainingPeriods,
29
+ }: {
30
+ period: RawPeriod
31
+ previousPeriod?: RawPeriod
32
+ campaign: RawCampaign
33
+ totalVotes: bigint
34
+ remainingPeriods: number
35
+ }) => {
36
+ // -- _checkForUpgrade is handled in solidity BatchCampaigns.sol
37
+ // -- If not first period, check if previousPeriod is updated
38
+ if (!period.updated && (previousPeriod?.updated || typeof previousPeriod === 'undefined')) {
39
+ // Calculate remaining periods and total reward.
40
+ const totalRewardForRemainingPeriods: bigint = campaign.totalRewardAmount - campaign.totalDistributed
41
+
42
+ // -- Update the period data.
43
+ const newRewardPerPeriod =
44
+ remainingPeriods > 0 ? totalRewardForRemainingPeriods / BigInt(remainingPeriods) : totalRewardForRemainingPeriods
45
+ period.rewardPerPeriod = newRewardPerPeriod
46
+
47
+ // -- Update the reward per vote
48
+ // If no votes, rollover the leftover to the next epoch.
49
+ if (totalVotes === Zero) {
50
+ period.leftover = period.rewardPerPeriod
51
+ } else {
52
+ // Calculate reward per vote
53
+ let rewardPerVote = (newRewardPerPeriod * BigInt(1e18)) / totalVotes
54
+
55
+ // Cap reward per vote at max reward per vote
56
+ if (rewardPerVote > campaign.maxRewardPerVote) {
57
+ rewardPerVote = campaign.maxRewardPerVote
58
+
59
+ // Calculate leftover rewards
60
+ const leftOver = newRewardPerPeriod - (rewardPerVote * totalVotes) / BigInt(1e18)
61
+
62
+ // Handle leftover rewards
63
+ if (campaign.hook === zeroAddress) {
64
+ // Store leftover in the period if there is no hook.
65
+ period.leftover = period.leftover + leftOver
66
+ }
67
+ }
68
+
69
+ // Save the calculated reward per vote.
70
+ period.rewardPerVote = rewardPerVote
71
+ }
72
+
73
+ // -- Update the total distributed amount
74
+ campaign.totalDistributed = campaign.totalDistributed + newRewardPerPeriod - period.leftover
75
+
76
+ // -- Mark the period as updated
77
+ period.updated = true
78
+ }
79
+
80
+ return campaign
81
+ }
82
+
20
83
  export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsProps): Promise<Campaign[]> => {
84
+ const block = await rpcGetLastBlockTimetstamp(rpc)
21
85
  const nCampaignsRequest = await rpcCall(rpc, [{ to: platform, data: '0x7274e30d' }]) // campaignCount
22
86
  const nCampaigns = Number(
23
87
  decodeAbiParameters([{ type: 'uint256', name: 'campaignCount' }], nCampaignsRequest[0].result),
@@ -42,6 +106,22 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
42
106
  callsKey: `votemarket/fetchCampaigns.ts: rawCampaigns - chainId ${chainId} - rpc ${rpc}`,
43
107
  })
44
108
 
109
+ const campaignsGauges: string[] = uniq(rawCampaigns.map((rc) => rc.campaign.gauge))
110
+ const rawGaugesWeights = await batchJsonRpc({
111
+ rpc: RPC[mainnet.id],
112
+ calls: [
113
+ concatBytecode(
114
+ batchGaugesWeight.bytecode[mainnet.id]!,
115
+ encodeAbiParameters(parseAbiParameters(batchGaugesWeight.inputType[mainnet.id]!) as any, [
116
+ contracts.curveGaugeController![1]!,
117
+ campaignsGauges,
118
+ ]),
119
+ ),
120
+ ],
121
+ outputTypeAbi: batchGaugesWeight.outputTypeHr[mainnet.id]!,
122
+ callsKey: `votemarket/fetchCampaigns.ts: rawGaugesWeights - chainId ${mainnet.id} - rpc ${RPC[mainnet.id]}`,
123
+ })
124
+
45
125
  const campaignsTokens: string[] = uniq(rawCampaigns.map((rc) => rc.campaign.rewardToken))
46
126
  const tokensToFetch: string[] = remove(campaignsTokens, (t) => !tokenWithAddress(t, chainId))
47
127
 
@@ -73,11 +153,17 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
73
153
  })),
74
154
  ]
75
155
 
76
- const prices = await getPrices(fetchedTokens as any, chainId)
156
+ // const prices = await getPrices(fetchedTokens as any, chainId)
157
+ // TMP FOR TEST PURPOSE REMOVE ONCE IN PROD
158
+ const prices = [
159
+ ...(await getPrices(fetchedTokens as any, chainId)),
160
+ { address: '0x9E49A0314AE61e9C9E34e4Af62a73FBFfB6DE95A', symbol: 'ARR', usdPrice: 10 },
161
+ ]
77
162
 
78
- const currentTimestamp = Math.floor(Date.now() / 1000)
163
+ const currentTimestamp = block.timestamp
79
164
 
80
165
  const campaigns = rawCampaigns.map((rc) => {
166
+ const gaugeWeightData = rawGaugesWeights.find((g) => equalTlc(g.gauge, rc.campaign.gauge))
81
167
  const rewardToken = fetchedTokens.find((t) => equalTlc(t.address, rc.campaign.rewardToken) && t.chainId === chainId)
82
168
  const decimals = rewardToken ? rewardToken.decimals : 18
83
169
 
@@ -85,33 +171,61 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
85
171
 
86
172
  const startTimestamp = Number(rc.campaign.startTimestamp)
87
173
  const endTimestamp = Number(rc.campaign.endTimestamp)
174
+ const numberOfPeriods = Number(rc.campaign.numberOfPeriods)
175
+
176
+ const totalVotes = gaugeWeightData.weight
177
+
178
+ // Simulate previous period update if not updated
179
+ if (rc.previousPeriod && !rc.previousPeriod.updated) {
180
+ updateEpoch({
181
+ period: rc.previousPeriod,
182
+ campaign: rc.campaign,
183
+ remainingPeriods: Number(rc.periodLeft) + 1,
184
+ totalVotes,
185
+ })
186
+ }
187
+
188
+ // Simulate current period update to simulate reward and apr
189
+ updateEpoch({
190
+ period: rc.currentPeriod,
191
+ previousPeriod: rc.previousPeriod,
192
+ campaign: rc.campaign,
193
+ remainingPeriods: Number(rc.periodLeft),
194
+ totalVotes,
195
+ })
88
196
 
89
197
  return {
90
198
  id: Number(rc.id),
91
- chainId: Number(rc.campaign.chainId),
199
+ chainId,
92
200
  gauge: rc.campaign.gauge,
201
+ gaugeChainId: Number(rc.campaign.chainId),
93
202
  manager: rc.campaign.manager,
94
203
  rewardToken,
95
204
  rewardTokenPrice,
96
- numberOfPeriods: Number(rc.campaign.numberOfPeriods),
205
+ numberOfPeriods,
206
+ periodLeft: Number(rc.periodLeft),
97
207
  maxRewardPerVote: formatUnits(rc.campaign.maxRewardPerVote, decimals),
98
208
  totalRewardAmount: formatUnits(rc.campaign.totalRewardAmount, decimals),
99
209
  totalDistributed: formatUnits(rc.campaign.totalDistributed, decimals),
100
210
  startTimestamp,
101
211
  endTimestamp,
102
212
  hook: rc.campaign.hook,
103
- isKilled: rc.isKilled,
213
+ isClosed: rc.isClosed,
104
214
  addresses: rc.addresses,
105
215
  isWhitelist: rc.isWhitelistOnly,
106
216
  isBlacklist: !rc.isWhitelistOnly && rc.addresses.length > 0,
217
+ previousPeriod: {
218
+ rewardPerPeriod: formatUnits(rc.previousPeriod.rewardPerPeriod, decimals),
219
+ rewardPerVote: formatUnits(rc.previousPeriod.rewardPerVote, decimals),
220
+ leftover: formatUnits(rc.previousPeriod.leftover, decimals),
221
+ updated: rc.previousPeriod.updated,
222
+ },
107
223
  currentPeriod: {
108
224
  rewardPerPeriod: formatUnits(rc.currentPeriod.rewardPerPeriod, decimals),
109
225
  rewardPerVote: formatUnits(rc.currentPeriod.rewardPerVote, decimals),
110
226
  leftover: formatUnits(rc.currentPeriod.leftover, decimals),
111
227
  updated: rc.currentPeriod.updated,
112
228
  },
113
- totalPeriods: (endTimestamp - startTimestamp) / ONE_WEEK,
114
- periodLeft: Number(rc.periodLeft),
115
229
  status: {
116
230
  voteOpen: endTimestamp - ONE_WEEK > currentTimestamp,
117
231
  voteClosed: currentTimestamp > endTimestamp - ONE_WEEK,
@@ -0,0 +1,50 @@
1
+ import { arbitrum } from '@stake-dao/constants'
2
+ import { chunk } from 'lodash-es'
3
+ import { encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
4
+ import batchClaimableData from '../bytecodes/votemarket/batchClaimableData.js'
5
+ import { concatBytecode } from '../index.js'
6
+ import { batchJsonRpc } from '../utils.js'
7
+
8
+ type Rpcs = {
9
+ [chainId: number]: string
10
+ }
11
+
12
+ const CLAIMABLE_CHUNK_SIZE = 10
13
+
14
+ export const fetchClaimableData = async (
15
+ rpc: Rpcs,
16
+ platform: string,
17
+ user: string,
18
+ campaigns: number[],
19
+ userVotes: any[][],
20
+ ) => {
21
+ const inputCampaignsChunks = chunk(campaigns, CLAIMABLE_CHUNK_SIZE)
22
+ const inputVotesChunks = chunk(userVotes, CLAIMABLE_CHUNK_SIZE)
23
+
24
+ const claimableCalls = inputCampaignsChunks.map((campaignsArgs, index) => {
25
+ const inputData = encodeAbiParameters(parseAbiParameters(batchClaimableData.inputType[arbitrum.id]!) as any, [
26
+ platform,
27
+ user,
28
+ campaignsArgs,
29
+ inputVotesChunks[index],
30
+ ])
31
+ return concatBytecode(batchClaimableData.bytecode[arbitrum.id]!, inputData)
32
+ })
33
+
34
+ const claimable = await batchJsonRpc({
35
+ rpc: rpc[arbitrum.id]!,
36
+ calls: claimableCalls,
37
+ outputTypeAbi: batchClaimableData.outputTypeHr[arbitrum.id],
38
+ callsKey: `Batch claimable data - chainId ${arbitrum.id} - rpc ${rpc[arbitrum.id]}`,
39
+ })
40
+
41
+ return claimable.map((c) => ({
42
+ campaignId: Number(c.campaignId),
43
+ claimInfo: c.claimInfo.map((ci) => ({
44
+ ...ci,
45
+ epoch: Number(ci.epoch),
46
+ blockNumber: Number(ci.blockNumber),
47
+ claimable: formatUnits(ci.claimable, 0),
48
+ })),
49
+ }))
50
+ }
@@ -0,0 +1,48 @@
1
+ import { chunk } from 'lodash-es'
2
+ import { encodeAbiParameters, parseAbiParameters } from 'viem'
3
+ import { mainnet } from 'viem/chains'
4
+ import batchVotes from '../bytecodes/votemarket/batchVotes.js'
5
+ import { concatBytecode } from '../index.js'
6
+ import { batchJsonRpcWithBlocks } from '../utils.js'
7
+
8
+ type Rpcs = {
9
+ [chainId: number]: string
10
+ }
11
+
12
+ export const fetchEpochsVotes = async (rpc: Rpcs, gaugeController: string, user: string, epochs: number[]) => {
13
+ const blocksForEpoch = (
14
+ await Promise.allSettled(
15
+ epochs.map((epoch) => fetch(`https://coins.llama.fi/block/ethereum/${epoch}`).then((res) => res.json())),
16
+ )
17
+ ).map((r) => (r.status === 'fulfilled' ? Number(r.value.height) : 0))
18
+
19
+ if (blocksForEpoch.includes(0)) {
20
+ throw Error(`Block not found for epoch at timestamp ${epochs[blocksForEpoch.indexOf(0)]}`)
21
+ }
22
+
23
+ const inputData = encodeAbiParameters(parseAbiParameters(batchVotes.inputType[mainnet.id]!) as any, [
24
+ gaugeController,
25
+ user,
26
+ ])
27
+ const call = concatBytecode(batchVotes.bytecode[mainnet.id]!, inputData)
28
+
29
+ const blocksChunks = chunk(blocksForEpoch, 10)
30
+ const votes = (
31
+ await Promise.all(
32
+ blocksChunks.map((b) =>
33
+ batchJsonRpcWithBlocks({
34
+ rpc: rpc[1]!,
35
+ call,
36
+ outputTypeAbi: batchVotes.outputTypeHr[mainnet.id],
37
+ callsKey: `Batch block votes data - chainId ${mainnet.id} - rpc ${rpc[mainnet.id]}`,
38
+ blocks: b,
39
+ }),
40
+ ),
41
+ )
42
+ ).flat()
43
+
44
+ return votes.map((v, index) => ({
45
+ votes: v,
46
+ epoch: epochs[index],
47
+ }))
48
+ }
@@ -0,0 +1,53 @@
1
+ export const GaugeControllerConstants = {
2
+ GAUGES_SLOTS: {
3
+ curve: {
4
+ pointWeights: 12,
5
+ lastUserVote: 11,
6
+ voteUserSlope: 9,
7
+ },
8
+ balancer: {
9
+ pointWeights: 1000000008,
10
+ lastUserVote: 1000000007,
11
+ voteUserSlope: 1000000005,
12
+ },
13
+ frax: {
14
+ pointWeights: 10000000011,
15
+ lastUserVote: 1000000010,
16
+ voteUserSlope: 1000000008,
17
+ },
18
+ fxn: {
19
+ pointWeights: 10000000011,
20
+ lastUserVote: 1000000010,
21
+ voteUserSlope: 1000000008,
22
+ },
23
+ },
24
+ GAUGE_CONTROLLER: {
25
+ curve: '0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB',
26
+ balancer: '0xC128468b7Ce63eA702C1f104D55A2566b13D3ABD',
27
+ frax: '0x3669C421b77340B2979d1A00a792CC2ee0FcE737',
28
+ fxn: '0xe60eB8098B34eD775ac44B1ddE864e098C6d7f37',
29
+ },
30
+ }
31
+
32
+ export const BLOCK_HEADER = [
33
+ 'parentHash',
34
+ 'sha3Uncles',
35
+ 'miner',
36
+ 'stateRoot',
37
+ 'transactionsRoot',
38
+ 'receiptsRoot',
39
+ 'logsBloom',
40
+ 'difficulty',
41
+ 'number',
42
+ 'gasLimit',
43
+ 'gasUsed',
44
+ 'timestamp',
45
+ 'extraData',
46
+ 'mixHash',
47
+ 'nonce',
48
+ 'baseFeePerGas',
49
+ 'withdrawalsRoot',
50
+ 'blobGasUsed',
51
+ 'excessBlobGas',
52
+ 'parentBeaconBlockRoot',
53
+ ]