@stake-dao/reader 0.5.15 → 0.5.17

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 (46) hide show
  1. package/dist/esm/bytecodes/index.js +1 -0
  2. package/dist/esm/bytecodes/index.js.map +1 -1
  3. package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js +1 -1
  4. package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js.map +1 -1
  5. package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js +1 -1
  6. package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js.map +1 -1
  7. package/dist/esm/bytecodes/votemarket/batchDirectIncentives.js +17 -0
  8. package/dist/esm/bytecodes/votemarket/batchDirectIncentives.js.map +1 -0
  9. package/dist/esm/index.js +5 -1
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/prices.js +178 -85
  12. package/dist/esm/prices.js.map +1 -1
  13. package/dist/esm/strategies/balancer/fetch.js +3 -21
  14. package/dist/esm/strategies/balancer/fetch.js.map +1 -1
  15. package/dist/esm/strategies/v2/parse.js +6 -2
  16. package/dist/esm/strategies/v2/parse.js.map +1 -1
  17. package/dist/esm/votemarket/balancer/fetchUserVlAuraClaimable.js +96 -0
  18. package/dist/esm/votemarket/balancer/fetchUserVlAuraClaimable.js.map +1 -0
  19. package/dist/esm/votemarket/fetchDirectIncentives.js +20 -0
  20. package/dist/esm/votemarket/fetchDirectIncentives.js.map +1 -0
  21. package/dist/types/bytecodes/index.d.ts +1 -0
  22. package/dist/types/bytecodes/index.d.ts.map +1 -1
  23. package/dist/types/bytecodes/votemarket/batchDirectIncentives.d.ts +4 -0
  24. package/dist/types/bytecodes/votemarket/batchDirectIncentives.d.ts.map +1 -0
  25. package/dist/types/index.d.ts +3 -1
  26. package/dist/types/index.d.ts.map +1 -1
  27. package/dist/types/prices.d.ts +17 -5
  28. package/dist/types/prices.d.ts.map +1 -1
  29. package/dist/types/strategies/balancer/fetch.d.ts +1 -2
  30. package/dist/types/strategies/balancer/fetch.d.ts.map +1 -1
  31. package/dist/types/strategies/v2/parse.d.ts.map +1 -1
  32. package/dist/types/votemarket/balancer/fetchUserVlAuraClaimable.d.ts +19 -0
  33. package/dist/types/votemarket/balancer/fetchUserVlAuraClaimable.d.ts.map +1 -0
  34. package/dist/types/votemarket/fetchDirectIncentives.d.ts +2 -0
  35. package/dist/types/votemarket/fetchDirectIncentives.d.ts.map +1 -0
  36. package/package.json +2 -2
  37. package/src/bytecodes/index.ts +3 -0
  38. package/src/bytecodes/strategies/batches/batchBalancerStrats.ts +1 -1
  39. package/src/bytecodes/strategies/builds/buildBalancerStrats.ts +1 -1
  40. package/src/bytecodes/votemarket/batchDirectIncentives.ts +21 -0
  41. package/src/index.ts +8 -1
  42. package/src/prices.ts +206 -92
  43. package/src/strategies/balancer/fetch.ts +3 -31
  44. package/src/strategies/v2/parse.ts +6 -2
  45. package/src/votemarket/balancer/fetchUserVlAuraClaimable.ts +159 -0
  46. package/src/votemarket/fetchDirectIncentives.ts +23 -0
@@ -2,7 +2,7 @@ import type { BatchMetaData } from '../../types.js'
2
2
 
3
3
  const buildBalancerStrats: BatchMetaData = {
4
4
  bytecode: {
5
- 1: '0x608060405234801561000f575f80fd5b50604051611a5f380380611a5f83398181016040528101906100319190611121565b5f815190505f8167ffffffffffffffff81111561005157610050610f94565b5b60405190808252806020026020018201604052801561008a57816020015b610077610e13565b81526020019060019003908161006f5790505b5090505f8490505f5b83811015610de4575f8582815181106100af576100ae61117b565b5b602002602001015190505f815f015190505f826020015190505f8273ffffffffffffffffffffffffffffffffffffffff16636835b8886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610112573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013691906111a8565b90505f8373ffffffffffffffffffffffffffffffffffffffff1663f9a0be686040518163ffffffff1660e01b8152600401602060405180830381865afa158015610182573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a691906111a8565b90505f8473ffffffffffffffffffffffffffffffffffffffff16633e0dc34e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102169190611206565b90508089888151811061022c5761022b61117b565b5b60200260200101515f018181525050855f01518988815181106102525761025161117b565b5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1663b9a09fd587602001516040518263ffffffff1660e01b81526004016102cd9190611240565b602060405180830381865afa1580156102e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030c91906111a8565b89888151811061031f5761031e61117b565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156103a5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103cd9190611309565b8988815181106103e0576103df61117b565b5b6020026020010151604001515f01819052508373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa15801561043a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906104629190611309565b8988815181106104755761047461117b565b5b602002602001015160400151602001819052508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f59190611383565b8988815181106105085761050761117b565b5b602002602001015160400151604001818152505085602001518988815181106105345761053361117b565b5b6020026020010151604001516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8873ffffffffffffffffffffffffffffffffffffffff1663f94d4668836040518263ffffffff1660e01b81526004016105b091906113bd565b5f60405180830381865afa1580156105ca573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105f29190611556565b505090505f815190508067ffffffffffffffff81111561061557610614610f94565b5b60405190808252806020026020018201604052801561064e57816020015b61063b610e7b565b8152602001906001900390816106335790505b508b8a815181106106625761066161117b565b5b6020026020010151608001819052505f5b81811015610924575f83828151811061068f5761068e61117b565b5b602002602001015190508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156106e1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906107099190611309565b8d8c8151811061071c5761071b61117b565b5b602002602001015160800151838151811061073a5761073961117b565b5b60200260200101515f01819052508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610790573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906107b89190611309565b8d8c815181106107cb576107ca61117b565b5b60200260200101516080015183815181106107e9576107e861117b565b5b6020026020010151602001819052508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610841573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108659190611383565b8d8c815181106108785761087761117b565b5b60200260200101516080015183815181106108965761089561117b565b5b60200260200101516040018181525050808d8c815181106108ba576108b961117b565b5b60200260200101516080015183815181106108d8576108d761117b565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050508080600101915050610673565b505f8473ffffffffffffffffffffffffffffffffffffffff1663963c94b96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109939190611383565b90508067ffffffffffffffff8111156109af576109ae610f94565b5b6040519080825280602002602001820160405280156109e857816020015b6109d5610eb7565b8152602001906001900390816109cd5790505b508c8b815181106109fc576109fb61117b565b5b602002602001015160a001819052505f5b81811015610dcd575f8673ffffffffffffffffffffffffffffffffffffffff166354c49fe9836040518263ffffffff1660e01b8152600401610a4f91906115ed565b602060405180830381865afa158015610a6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8e91906111a8565b9050868e8d81518110610aa457610aa361117b565b5b602002602001015160a001518381518110610ac257610ac161117b565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818e8d81518110610b1357610b1261117b565b5b602002602001015160a001518381518110610b3157610b3061117b565b5b602002602001015160200181815250508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610b89573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610bb19190611309565b8e8d81518110610bc457610bc361117b565b5b602002602001015160a001518381518110610be257610be161117b565b5b6020026020010151604001819052508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c39573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c619190611309565b8e8d81518110610c7457610c7361117b565b5b602002602001015160a001518381518110610c9257610c9161117b565b5b6020026020010151606001819052508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0e9190611383565b8e8d81518110610d2157610d2061117b565b5b602002602001015160a001518381518110610d3f57610d3e61117b565b5b60200260200101516080018181525050808e8d81518110610d6357610d6261117b565b5b602002602001015160a001518381518110610d8157610d8061117b565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050508080600101915050610a0d565b505050505050505050508080600101915050610093565b505f82604051602001610df79190611a3e565b6040516020818303038152906040529050602081018059038082f35b6040518060c001604052805f80191681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001610e4b610e7b565b81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081525090565b604051806080016040528060608152602001606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b6040518060c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f815260200160608152602001606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f4f82610f26565b9050919050565b610f5f81610f45565b8114610f69575f80fd5b50565b5f81519050610f7a81610f56565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fca82610f84565b810181811067ffffffffffffffff82111715610fe957610fe8610f94565b5b80604052505050565b5f610ffb610f15565b90506110078282610fc1565b919050565b5f67ffffffffffffffff82111561102657611025610f94565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f604082840312156110545761105361103b565b5b61105e6040610ff2565b90505f61106d84828501610f6c565b5f83015250602061108084828501610f6c565b60208301525092915050565b5f61109e6110998461100c565b610ff2565b905080838252602082019050604084028301858111156110c1576110c0611037565b5b835b818110156110ea57806110d6888261103f565b8452602084019350506040810190506110c3565b5050509392505050565b5f82601f83011261110857611107610f80565b5b815161111884826020860161108c565b91505092915050565b5f806040838503121561113757611136610f1e565b5b5f61114485828601610f6c565b925050602083015167ffffffffffffffff81111561116557611164610f22565b5b611171858286016110f4565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156111bd576111bc610f1e565b5b5f6111ca84828501610f6c565b91505092915050565b5f819050919050565b6111e5816111d3565b81146111ef575f80fd5b50565b5f81519050611200816111dc565b92915050565b5f6020828403121561121b5761121a610f1e565b5b5f611228848285016111f2565b91505092915050565b61123a81610f45565b82525050565b5f6020820190506112535f830184611231565b92915050565b5f80fd5b5f67ffffffffffffffff82111561127757611276610f94565b5b61128082610f84565b9050602081019050919050565b8281835e5f83830152505050565b5f6112ad6112a88461125d565b610ff2565b9050828152602081018484840111156112c9576112c8611259565b5b6112d484828561128d565b509392505050565b5f82601f8301126112f0576112ef610f80565b5b815161130084826020860161129b565b91505092915050565b5f6020828403121561131e5761131d610f1e565b5b5f82015167ffffffffffffffff81111561133b5761133a610f22565b5b611347848285016112dc565b91505092915050565b5f819050919050565b61136281611350565b811461136c575f80fd5b50565b5f8151905061137d81611359565b92915050565b5f6020828403121561139857611397610f1e565b5b5f6113a58482850161136f565b91505092915050565b6113b7816111d3565b82525050565b5f6020820190506113d05f8301846113ae565b92915050565b5f67ffffffffffffffff8211156113f0576113ef610f94565b5b602082029050602081019050919050565b5f61141361140e846113d6565b610ff2565b9050808382526020820190506020840283018581111561143657611435611037565b5b835b8181101561145f578061144b8882610f6c565b845260208401935050602081019050611438565b5050509392505050565b5f82601f83011261147d5761147c610f80565b5b815161148d848260208601611401565b91505092915050565b5f67ffffffffffffffff8211156114b0576114af610f94565b5b602082029050602081019050919050565b5f6114d36114ce84611496565b610ff2565b905080838252602082019050602084028301858111156114f6576114f5611037565b5b835b8181101561151f578061150b888261136f565b8452602084019350506020810190506114f8565b5050509392505050565b5f82601f83011261153d5761153c610f80565b5b815161154d8482602086016114c1565b91505092915050565b5f805f6060848603121561156d5761156c610f1e565b5b5f84015167ffffffffffffffff81111561158a57611589610f22565b5b61159686828701611469565b935050602084015167ffffffffffffffff8111156115b7576115b6610f22565b5b6115c386828701611529565b92505060406115d48682870161136f565b9150509250925092565b6115e781611350565b82525050565b5f6020820190506116005f8301846115de565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611638816111d3565b82525050565b61164781610f45565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6116718261164d565b61167b8185611657565b935061168b81856020860161128d565b61169481610f84565b840191505092915050565b6116a881611350565b82525050565b5f608083015f8301518482035f8601526116c88282611667565b915050602083015184820360208601526116e28282611667565b91505060408301516116f7604086018261169f565b50606083015161170a606086018261163e565b508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61174983836116ae565b905092915050565b5f602082019050919050565b5f61176782611715565b611771818561171f565b9350836020820285016117838561172f565b805f5b858110156117be578484038952815161179f858261173e565b94506117aa83611751565b925060208a01995050600181019050611786565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60c083015f83015161180e5f86018261163e565b506020830151611821602086018261169f565b50604083015184820360408601526118398282611667565b915050606083015184820360608601526118538282611667565b9150506080830151611868608086018261169f565b5060a083015161187b60a086018261163e565b508091505092915050565b5f61189183836117f9565b905092915050565b5f602082019050919050565b5f6118af826117d0565b6118b981856117da565b9350836020820285016118cb856117ea565b805f5b8581101561190657848403895281516118e78582611886565b94506118f283611899565b925060208a019950506001810190506118ce565b50829750879550505050505092915050565b5f60c083015f83015161192d5f86018261162f565b506020830151611940602086018261163e565b506040830151848203604086015261195882826116ae565b915050606083015161196d606086018261163e565b5060808301518482036080860152611985828261175d565b91505060a083015184820360a086015261199f82826118a5565b9150508091505092915050565b5f6119b78383611918565b905092915050565b5f602082019050919050565b5f6119d582611606565b6119df8185611610565b9350836020820285016119f185611620565b805f5b85811015611a2c5784840389528151611a0d85826119ac565b9450611a18836119bf565b925060208a019950506001810190506119f4565b50829750879550505050505092915050565b5f6020820190508181035f830152611a5681846119cb565b90509291505056fe',
5
+ 1: '0x608060405234801561000f575f80fd5b50604051611a07380380611a07833981810160405281019061003191906110c9565b5f815190505f8167ffffffffffffffff81111561005157610050610f3c565b5b60405190808252806020026020018201604052801561008a57816020015b610077610dbb565b81526020019060019003908161006f5790505b5090505f8490505f5b83811015610d8c575f8582815181106100af576100ae611123565b5b602002602001015190505f815f015190505f826020015190505f73873b031ea6e4236e44d933aae5a66af6d4da419d90505f8373ffffffffffffffffffffffffffffffffffffffff1663f9a0be686040518163ffffffff1660e01b8152600401602060405180830381865afa15801561012a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014e9190611150565b90505f8473ffffffffffffffffffffffffffffffffffffffff16633e0dc34e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906111ae565b9050808988815181106101d4576101d3611123565b5b60200260200101515f018181525050855f01518988815181106101fa576101f9611123565b5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1663b9a09fd587602001516040518263ffffffff1660e01b815260040161027591906111e8565b602060405180830381865afa158015610290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190611150565b8988815181106102c7576102c6611123565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561034d573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061037591906112b1565b89888151811061038857610387611123565b5b6020026020010151604001515f01819052508373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156103e2573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061040a91906112b1565b89888151811061041d5761041c611123565b5b602002602001015160400151602001819052508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049d919061132b565b8988815181106104b0576104af611123565b5b602002602001015160400151604001818152505085602001518988815181106104dc576104db611123565b5b6020026020010151604001516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8873ffffffffffffffffffffffffffffffffffffffff1663f94d4668836040518263ffffffff1660e01b81526004016105589190611365565b5f60405180830381865afa158015610572573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061059a91906114fe565b505090505f815190508067ffffffffffffffff8111156105bd576105bc610f3c565b5b6040519080825280602002602001820160405280156105f657816020015b6105e3610e23565b8152602001906001900390816105db5790505b508b8a8151811061060a57610609611123565b5b6020026020010151608001819052505f5b818110156108cc575f83828151811061063757610636611123565b5b602002602001015190508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610689573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906106b191906112b1565b8d8c815181106106c4576106c3611123565b5b60200260200101516080015183815181106106e2576106e1611123565b5b60200260200101515f01819052508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610738573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061076091906112b1565b8d8c8151811061077357610772611123565b5b602002602001015160800151838151811061079157610790611123565b5b6020026020010151602001819052508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080d919061132b565b8d8c815181106108205761081f611123565b5b602002602001015160800151838151811061083e5761083d611123565b5b60200260200101516040018181525050808d8c8151811061086257610861611123565b5b60200260200101516080015183815181106108805761087f611123565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061061b565b505f8473ffffffffffffffffffffffffffffffffffffffff1663963c94b96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610917573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093b919061132b565b90508067ffffffffffffffff81111561095757610956610f3c565b5b60405190808252806020026020018201604052801561099057816020015b61097d610e5f565b8152602001906001900390816109755790505b508c8b815181106109a4576109a3611123565b5b602002602001015160a001819052505f5b81811015610d75575f8673ffffffffffffffffffffffffffffffffffffffff166354c49fe9836040518263ffffffff1660e01b81526004016109f79190611595565b602060405180830381865afa158015610a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a369190611150565b9050868e8d81518110610a4c57610a4b611123565b5b602002602001015160a001518381518110610a6a57610a69611123565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818e8d81518110610abb57610aba611123565b5b602002602001015160a001518381518110610ad957610ad8611123565b5b602002602001015160200181815250508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610b31573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610b5991906112b1565b8e8d81518110610b6c57610b6b611123565b5b602002602001015160a001518381518110610b8a57610b89611123565b5b6020026020010151604001819052508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610be1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c0991906112b1565b8e8d81518110610c1c57610c1b611123565b5b602002602001015160a001518381518110610c3a57610c39611123565b5b6020026020010151606001819052508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb6919061132b565b8e8d81518110610cc957610cc8611123565b5b602002602001015160a001518381518110610ce757610ce6611123565b5b60200260200101516080018181525050808e8d81518110610d0b57610d0a611123565b5b602002602001015160a001518381518110610d2957610d28611123565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505080806001019150506109b5565b505050505050505050508080600101915050610093565b505f82604051602001610d9f91906119e6565b6040516020818303038152906040529050602081018059038082f35b6040518060c001604052805f80191681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001610df3610e23565b81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081525090565b604051806080016040528060608152602001606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b6040518060c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f815260200160608152602001606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ef782610ece565b9050919050565b610f0781610eed565b8114610f11575f80fd5b50565b5f81519050610f2281610efe565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f7282610f2c565b810181811067ffffffffffffffff82111715610f9157610f90610f3c565b5b80604052505050565b5f610fa3610ebd565b9050610faf8282610f69565b919050565b5f67ffffffffffffffff821115610fce57610fcd610f3c565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f60408284031215610ffc57610ffb610fe3565b5b6110066040610f9a565b90505f61101584828501610f14565b5f83015250602061102884828501610f14565b60208301525092915050565b5f61104661104184610fb4565b610f9a565b9050808382526020820190506040840283018581111561106957611068610fdf565b5b835b81811015611092578061107e8882610fe7565b84526020840193505060408101905061106b565b5050509392505050565b5f82601f8301126110b0576110af610f28565b5b81516110c0848260208601611034565b91505092915050565b5f80604083850312156110df576110de610ec6565b5b5f6110ec85828601610f14565b925050602083015167ffffffffffffffff81111561110d5761110c610eca565b5b6111198582860161109c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561116557611164610ec6565b5b5f61117284828501610f14565b91505092915050565b5f819050919050565b61118d8161117b565b8114611197575f80fd5b50565b5f815190506111a881611184565b92915050565b5f602082840312156111c3576111c2610ec6565b5b5f6111d08482850161119a565b91505092915050565b6111e281610eed565b82525050565b5f6020820190506111fb5f8301846111d9565b92915050565b5f80fd5b5f67ffffffffffffffff82111561121f5761121e610f3c565b5b61122882610f2c565b9050602081019050919050565b8281835e5f83830152505050565b5f61125561125084611205565b610f9a565b90508281526020810184848401111561127157611270611201565b5b61127c848285611235565b509392505050565b5f82601f83011261129857611297610f28565b5b81516112a8848260208601611243565b91505092915050565b5f602082840312156112c6576112c5610ec6565b5b5f82015167ffffffffffffffff8111156112e3576112e2610eca565b5b6112ef84828501611284565b91505092915050565b5f819050919050565b61130a816112f8565b8114611314575f80fd5b50565b5f8151905061132581611301565b92915050565b5f602082840312156113405761133f610ec6565b5b5f61134d84828501611317565b91505092915050565b61135f8161117b565b82525050565b5f6020820190506113785f830184611356565b92915050565b5f67ffffffffffffffff82111561139857611397610f3c565b5b602082029050602081019050919050565b5f6113bb6113b68461137e565b610f9a565b905080838252602082019050602084028301858111156113de576113dd610fdf565b5b835b8181101561140757806113f38882610f14565b8452602084019350506020810190506113e0565b5050509392505050565b5f82601f83011261142557611424610f28565b5b81516114358482602086016113a9565b91505092915050565b5f67ffffffffffffffff82111561145857611457610f3c565b5b602082029050602081019050919050565b5f61147b6114768461143e565b610f9a565b9050808382526020820190506020840283018581111561149e5761149d610fdf565b5b835b818110156114c757806114b38882611317565b8452602084019350506020810190506114a0565b5050509392505050565b5f82601f8301126114e5576114e4610f28565b5b81516114f5848260208601611469565b91505092915050565b5f805f6060848603121561151557611514610ec6565b5b5f84015167ffffffffffffffff81111561153257611531610eca565b5b61153e86828701611411565b935050602084015167ffffffffffffffff81111561155f5761155e610eca565b5b61156b868287016114d1565b925050604061157c86828701611317565b9150509250925092565b61158f816112f8565b82525050565b5f6020820190506115a85f830184611586565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6115e08161117b565b82525050565b6115ef81610eed565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f611619826115f5565b61162381856115ff565b9350611633818560208601611235565b61163c81610f2c565b840191505092915050565b611650816112f8565b82525050565b5f608083015f8301518482035f860152611670828261160f565b9150506020830151848203602086015261168a828261160f565b915050604083015161169f6040860182611647565b5060608301516116b260608601826115e6565b508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6116f18383611656565b905092915050565b5f602082019050919050565b5f61170f826116bd565b61171981856116c7565b93508360208202850161172b856116d7565b805f5b85811015611766578484038952815161174785826116e6565b9450611752836116f9565b925060208a0199505060018101905061172e565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60c083015f8301516117b65f8601826115e6565b5060208301516117c96020860182611647565b50604083015184820360408601526117e1828261160f565b915050606083015184820360608601526117fb828261160f565b91505060808301516118106080860182611647565b5060a083015161182360a08601826115e6565b508091505092915050565b5f61183983836117a1565b905092915050565b5f602082019050919050565b5f61185782611778565b6118618185611782565b93508360208202850161187385611792565b805f5b858110156118ae578484038952815161188f858261182e565b945061189a83611841565b925060208a01995050600181019050611876565b50829750879550505050505092915050565b5f60c083015f8301516118d55f8601826115d7565b5060208301516118e860208601826115e6565b50604083015184820360408601526119008282611656565b915050606083015161191560608601826115e6565b506080830151848203608086015261192d8282611705565b91505060a083015184820360a0860152611947828261184d565b9150508091505092915050565b5f61195f83836118c0565b905092915050565b5f602082019050919050565b5f61197d826115ae565b61198781856115b8565b935083602082028501611999856115c8565b805f5b858110156119d457848403895281516119b58582611954565b94506119c083611967565b925060208a0199505060018101905061199c565b50829750879550505050505092915050565b5f6020820190508181035f8301526119fe8184611973565b90509291505056fe',
6
6
  },
7
7
  inputType: {
8
8
  1: [
@@ -0,0 +1,21 @@
1
+ import type { BatchMetaData } from '../types.js'
2
+
3
+ const batchDirectIncentives: BatchMetaData = {
4
+ bytecode: {
5
+ 1: '0x608060405234801561000f575f80fd5b50604051610c1a380380610c1a83398181016040528101906100319190610596565b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff16637ef9faaa6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561007f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a391906105d4565b90505f83826100b2919061062c565b67ffffffffffffffff8111156100cb576100ca61065f565b5b60405190808252806020026020018201604052801561010457816020015b6100f1610430565b8152602001906001900390816100e95790505b5090505f8490505b82811015610401575f8473ffffffffffffffffffffffffffffffffffffffff1663e121c102836040518263ffffffff1660e01b815260040161014e919061069b565b61012060405180830381865afa15801561016a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018e91906107f0565b90505f6040518060800160405280836020015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156101e8573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061021091906108d0565b8152602001836020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610261573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061028991906108d0565b8152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031f919061094d565b60ff168152509050604051806101200160405280835f015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018360400151815260200183606001518152602001836080015181526020018360a0015181526020018360c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018360e00151815260200183610100015173ffffffffffffffffffffffffffffffffffffffff168152508488856103d6919061062c565b815181106103e7576103e6610978565b5b60200260200101819052505050808060010191505061010c565b505f816040516020016104149190610bf9565b6040516020818303038152906040529050602081018059038082f35b6040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016104606104bc565b81526020015f81526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b604051806080016040528060608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61053282610509565b9050919050565b61054281610528565b811461054c575f80fd5b50565b5f8151905061055d81610539565b92915050565b5f819050919050565b61057581610563565b811461057f575f80fd5b50565b5f815190506105908161056c565b92915050565b5f80604083850312156105ac576105ab610501565b5b5f6105b98582860161054f565b92505060206105ca85828601610582565b9150509250929050565b5f602082840312156105e9576105e8610501565b5b5f6105f684828501610582565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61063682610563565b915061064183610563565b9250828203905081811115610659576106586105ff565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61069581610563565b82525050565b5f6020820190506106ae5f83018461068c565b92915050565b5f80fd5b5f601f19601f8301169050919050565b6106d1826106b8565b810181811067ffffffffffffffff821117156106f0576106ef61065f565b5b80604052505050565b5f6107026104f8565b905061070e82826106c8565b919050565b5f6101208284031215610729576107286106b4565b5b6107346101206106f9565b90505f6107438482850161054f565b5f8301525060206107568482850161054f565b602083015250604061076a84828501610582565b604083015250606061077e84828501610582565b606083015250608061079284828501610582565b60808301525060a06107a684828501610582565b60a08301525060c06107ba8482850161054f565b60c08301525060e06107ce84828501610582565b60e0830152506101006107e38482850161054f565b6101008301525092915050565b5f610120828403121561080657610805610501565b5b5f61081384828501610713565b91505092915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561083e5761083d61065f565b5b610847826106b8565b9050602081019050919050565b8281835e5f83830152505050565b5f61087461086f84610824565b6106f9565b9050828152602081018484840111156108905761088f610820565b5b61089b848285610854565b509392505050565b5f82601f8301126108b7576108b661081c565b5b81516108c7848260208601610862565b91505092915050565b5f602082840312156108e5576108e4610501565b5b5f82015167ffffffffffffffff81111561090257610901610505565b5b61090e848285016108a3565b91505092915050565b5f60ff82169050919050565b61092c81610917565b8114610936575f80fd5b50565b5f8151905061094781610923565b92915050565b5f6020828403121561096257610961610501565b5b5f61096f84828501610939565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6109d781610528565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610a01826109dd565b610a0b81856109e7565b9350610a1b818560208601610854565b610a24816106b8565b840191505092915050565b610a3881610563565b82525050565b5f608083015f8301518482035f860152610a5882826109f7565b91505060208301518482036020860152610a7282826109f7565b9150506040830151610a8760408601826109ce565b506060830151610a9a6060860182610a2f565b508091505092915050565b5f61012083015f830151610abb5f8601826109ce565b5060208301518482036020860152610ad38282610a3e565b9150506040830151610ae86040860182610a2f565b506060830151610afb6060860182610a2f565b506080830151610b0e6080860182610a2f565b5060a0830151610b2160a0860182610a2f565b5060c0830151610b3460c08601826109ce565b5060e0830151610b4760e0860182610a2f565b50610100830151610b5c6101008601826109ce565b508091505092915050565b5f610b728383610aa5565b905092915050565b5f602082019050919050565b5f610b90826109a5565b610b9a81856109af565b935083602082028501610bac856109bf565b805f5b85811015610be75784840389528151610bc88582610b67565b9450610bd383610b7a565b925060208a01995050600181019050610baf565b50829750879550505050505092915050565b5f6020820190508181035f830152610c118184610b86565b90509291505056fe',
6
+ },
7
+
8
+ inputType: {
9
+ 1: ['address _campaignRewardDistributor', 'uint256 _start'],
10
+ },
11
+
12
+ outputTypeHr: {
13
+ 1: [
14
+ 'DirectIncentive[] returnData',
15
+ 'struct DirectIncentive { address gauge; Token reward; uint256 duration; uint256 start; uint256 end; uint256 fromChainId; address sender; uint256 amount; address manager; }',
16
+ 'struct Token { string name; string symbol; address _address; uint256 decimals; }',
17
+ ],
18
+ },
19
+ }
20
+
21
+ export default batchDirectIncentives
package/src/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  ///////////////////////////////////////////////////////////////
4
4
  export { getLlamaTokenPrefix, getPricesFromLlama } from './prices.js'
5
5
  export { getGeckoTerminalTokenPrefix, getPricesFromGeckoTerminal } from './prices.js'
6
- export { getPrices, findPrice, type Price } from './prices.js'
6
+ export { getPrices, findPrice, type Price, fetchPrices } from './prices.js'
7
7
  export * from './sdt.js'
8
8
  export * from './tokens.js'
9
9
  export { rpcGetLastBlockTimetstamp, rpcCall, batchJsonRpc, ethGetTxsReceipts } from './utils.js'
@@ -143,9 +143,16 @@ export { generateUserProof } from './votemarket/generateProofs/getUserProof.js'
143
143
 
144
144
  export { fetchUserVlCvxClaimable } from './votemarket/curve/fetchUserVlCvxClaimable.js'
145
145
 
146
+ // vlAURA Claims
147
+
148
+ export { fetchUserVlAuraClaimable } from './votemarket/balancer/fetchUserVlAuraClaimable.js'
149
+
146
150
  // External campaigns
147
151
  export { fetchVotiumCampaigns } from './votemarket/externalCampaigns/fetchVotiumCampaigns.js'
148
152
 
153
+ // Direct incentives
154
+ export { fetchDirectIncentives } from './votemarket/fetchDirectIncentives.js'
155
+
149
156
  /// --- END VOTEMARKET
150
157
  ///////////////////////////////////////////////////////////////
151
158
 
package/src/prices.ts CHANGED
@@ -1,7 +1,9 @@
1
- import { tokenWithId } from '@stake-dao/constants'
2
- import { chunk, uniq } from 'lodash-es'
1
+ import { RPC, tokenWithId, tokens } from '@stake-dao/constants'
2
+ import { chunk, uniq, uniqWith } from 'lodash-es'
3
+ import { decodeAbiParameters, formatUnits } from 'viem'
4
+ import { mainnet } from 'viem/chains'
3
5
  import { TOKENS_CHUNK_SIZE } from './strategies/curve/fetch/curveApiData/config.js'
4
- import { equalTlc } from './utils.js'
6
+ import { equalTlc, rpcCall } from './utils.js'
5
7
 
6
8
  const LLAMA_API_URL = 'https://coins.llama.fi'
7
9
  const GECKO_TERMINAL_API_URL = 'https://api.geckoterminal.com/api/v2'
@@ -12,41 +14,127 @@ export type Price = {
12
14
  usdPrice: number
13
15
  }
14
16
 
17
+ interface TokenToFetch {
18
+ address: string
19
+ symbol: string
20
+ extensions?: {
21
+ onChainPrice?: {
22
+ to: string
23
+ data: string
24
+ decimals: number
25
+ }
26
+ }
27
+ }
28
+
29
+ interface TokenToFetchWithChainId extends TokenToFetch {
30
+ chainId: number
31
+ }
32
+
33
+ const FORCE_GECKO_TERMINAL_TOKENS = {
34
+ [mainnet.id]: [],
35
+ }
36
+
37
+ // ********************************************************************************
38
+ // ******** ********
39
+ // ******** DEFILLAMA CHAIN PREFIX ********
40
+ // ******** ********
41
+ // ********************************************************************************
42
+
15
43
  export const getLlamaTokenPrefix = (chainId = 1): string => {
16
- switch (chainId) {
17
- case 1:
18
- return 'ethereum'
19
- case 10:
20
- return 'optimism'
21
- case 56:
22
- return 'bsc'
23
- case 137:
24
- return 'polygon'
25
- case 146:
26
- return 'sonic'
27
- case 252:
28
- return 'fraxtal'
29
- case 999:
30
- return 'hyperliquid'
31
- case 8453:
32
- return 'base'
33
- case 42161:
34
- return 'arbitrum'
35
- case 43114:
36
- return 'avax'
37
- case 59144:
38
- return 'linea'
39
- case 42793:
40
- return 'etherlink'
41
- default:
42
- return 'ethereum'
44
+ if (chainId === 1) return 'ethereum'
45
+ if (chainId === 10) return 'optimism'
46
+ if (chainId === 56) return 'bsc'
47
+ if (chainId === 137) return 'polygon'
48
+ if (chainId === 146) return 'sonic'
49
+ if (chainId === 252) return 'fraxtal'
50
+ if (chainId === 999) return 'hyperliquid'
51
+ if (chainId === 8453) return 'base'
52
+ if (chainId === 42161) return 'arbitrum'
53
+ if (chainId === 43114) return 'avax'
54
+ if (chainId === 59144) return 'linea'
55
+ if (chainId === 42793) return 'etherlink'
56
+
57
+ return 'ethereum'
58
+ }
59
+
60
+ // ********************************************************************************
61
+ // ******** ********
62
+ // ******** GECKO TERMINAL CHAIN PREFIX ********
63
+ // ******** ********
64
+ // ********************************************************************************
65
+
66
+ export const getGeckoTerminalTokenPrefix = (chainId = 1): string => {
67
+ if (chainId === 1) return 'eth'
68
+ if (chainId === 10) return 'optimism'
69
+ if (chainId === 56) return 'bsc'
70
+ if (chainId === 137) return 'polygon_pos'
71
+ if (chainId === 146) return 'sonic'
72
+ if (chainId === 252) return 'fraxtal'
73
+ if (chainId === 999) return 'hyperliquid'
74
+ if (chainId === 8453) return 'base'
75
+ if (chainId === 42161) return 'arbitrum'
76
+ if (chainId === 43114) return 'avax'
77
+ if (chainId === 59144) return 'linea'
78
+ if (chainId === 42793) return 'etherlink'
79
+
80
+ return 'eth'
81
+ }
82
+
83
+ // ********************************************************************************
84
+ // ******** ********
85
+ // ******** ON CHAIN ********
86
+ // ******** ********
87
+ // ********************************************************************************
88
+
89
+ export const getOnChainPrices = async (tokens: TokenToFetch[]): Promise<Price[]> => {
90
+ try {
91
+ const tokenWithOnChainPrice = tokens.filter((t) => t.extensions?.onChainPrice)
92
+ if (tokenWithOnChainPrice.length === 0) return []
93
+
94
+ const uniqCalls = uniqWith(
95
+ tokenWithOnChainPrice.map((t) => t.extensions!.onChainPrice!),
96
+ (a, b) => {
97
+ return equalTlc(a.to, b.to) && equalTlc(a.data, b.data) && a.decimals === b.decimals
98
+ },
99
+ )
100
+ const rawPrices = await rpcCall(RPC[mainnet.id], uniqCalls)
101
+ const prices: Price[] = []
102
+
103
+ for (let i = 0; i < rawPrices.length; i++) {
104
+ const call = uniqCalls[i]!
105
+ const tokensToPrice = tokenWithOnChainPrice.filter((t) => equalTlc(t.extensions!.onChainPrice!.to, call.to))
106
+ const decodedRes = decodeAbiParameters([{ type: 'int256' }], rawPrices[i].result)[0]
107
+
108
+ for (const t of tokensToPrice) {
109
+ prices.push({
110
+ symbol: t.symbol,
111
+ address: t.address,
112
+ usdPrice: Number(formatUnits(decodedRes, call.decimals)),
113
+ })
114
+ }
115
+ }
116
+
117
+ return prices
118
+ } catch (e) {
119
+ console.error(e)
120
+ return []
43
121
  }
44
122
  }
45
123
 
46
- export const getPricesFromLlama = async (tokens: any[], chainId = 1, defaultErrorValue?: any): Promise<Price[]> => {
124
+ // ********************************************************************************
125
+ // ******** ********
126
+ // ******** DEFILLAMA ********
127
+ // ******** ********
128
+ // ********************************************************************************
129
+
130
+ export const getPricesFromLlama = async (
131
+ tokens: TokenToFetch[],
132
+ chainId: number = mainnet.id,
133
+ defaultErrorValue?: any,
134
+ ): Promise<Price[]> => {
47
135
  if (tokens.length > 0) {
48
136
  try {
49
- const parsedPrice: { symbol: string; address: string; usdPrice: number }[] = []
137
+ const parsedPrice: Price[] = []
50
138
 
51
139
  const prefix: string = getLlamaTokenPrefix(chainId)
52
140
  const tokensChunks = chunk(tokens, TOKENS_CHUNK_SIZE)
@@ -77,47 +165,15 @@ export const getPricesFromLlama = async (tokens: any[], chainId = 1, defaultErro
77
165
  return []
78
166
  }
79
167
 
80
- export const getPricesFromCurve = async (chainId: number) => {
81
- const prefix = getLlamaTokenPrefix(chainId)
82
- const httpRequest = (await fetch(`https://prices.curve.finance/v1/usd_price/${prefix}`)).json()
83
-
84
- return httpRequest
85
- }
86
-
87
- export const getGeckoTerminalTokenPrefix = (chainId = 1): string => {
88
- switch (chainId) {
89
- case 1:
90
- return 'eth'
91
- case 10:
92
- return 'optimism'
93
- case 56:
94
- return 'bsc'
95
- case 137:
96
- return 'polygon_pos'
97
- case 146:
98
- return 'sonic'
99
- case 252:
100
- return 'fraxtal'
101
- case 999:
102
- return 'hyperliquid'
103
- case 8453:
104
- return 'base'
105
- case 42161:
106
- return 'arbitrum'
107
- case 43114:
108
- return 'avax'
109
- case 59144:
110
- return 'linea'
111
- case 42793:
112
- return 'etherlink'
113
- default:
114
- return 'eth'
115
- }
116
- }
168
+ // ********************************************************************************
169
+ // ******** ********
170
+ // ******** GECKO TERMINAL ********
171
+ // ******** ********
172
+ // ********************************************************************************
117
173
 
118
174
  export const getPricesFromGeckoTerminal = async (
119
- tokens: any[],
120
- chainId = 1,
175
+ tokens: TokenToFetch[],
176
+ chainId: number = mainnet.id,
121
177
  defaultErrorValue?: any,
122
178
  ): Promise<Price[]> => {
123
179
  try {
@@ -149,41 +205,99 @@ export const getPricesFromGeckoTerminal = async (
149
205
  }
150
206
  }
151
207
 
152
- interface TokenToFetch {
153
- address: string
154
- symbol: string
208
+ // ********************************************************************************
209
+ // ******** ********
210
+ // ******** CURVE API ********
211
+ // ******** ********
212
+ // ********************************************************************************
213
+
214
+ export const getPricesFromCurve = async (chainId: number) => {
215
+ const prefix = getLlamaTokenPrefix(chainId)
216
+ const httpRequest = (await fetch(`https://prices.curve.finance/v1/usd_price/${prefix}`)).json()
217
+
218
+ return httpRequest
155
219
  }
156
220
 
221
+ // ********************************************************************************
222
+ // ******** ********
223
+ // ******** GLOBAL PER CHAIN ********
224
+ // ******** ********
225
+ // ********************************************************************************
226
+
157
227
  export const getPrices = async (tokens: TokenToFetch[], chainId = 1): Promise<Price[]> => {
158
- let pricesFromGecko: Price[] = []
159
- if (tokens.length > 0) {
160
- pricesFromGecko = pricesFromGecko.concat(await getPricesFromGeckoTerminal(tokens, chainId))
161
- }
228
+ // Fetch on chain first
229
+ let res: Price[] = await getOnChainPrices(tokens)
162
230
 
163
- const pricesToFetchFromLlama = tokens
164
- .map((t) => {
165
- const coinPrice = pricesFromGecko.find((pl) => equalTlc(pl.address, t.address))?.usdPrice || 0
166
- return coinPrice === 0 ? t : undefined
167
- })
168
- .filter(Boolean)
231
+ const toFetchFromGecko = tokens
232
+ .map((t) => ({ ...t, usdPrice: res.find((r) => equalTlc(r.address, t.address))?.usdPrice || 0 }))
233
+ .filter((t) => t.usdPrice === 0)
169
234
 
170
- let pricesFromLlama: Price[] = []
171
- if (tokens.length > 0) {
172
- pricesFromLlama = pricesFromLlama.concat(await getPricesFromLlama(pricesToFetchFromLlama, chainId))
173
- }
235
+ if (toFetchFromGecko.length > 0) res = res.concat(await getPricesFromGeckoTerminal(toFetchFromGecko, chainId))
236
+
237
+ const toFetchFromLlama = tokens
238
+ .map((t) => ({ ...t, usdPrice: res.find((r) => equalTlc(r.address, t.address))?.usdPrice || 0 }))
239
+ .filter((t) => t.usdPrice === 0)
174
240
 
175
- const prices = [pricesFromLlama, pricesFromGecko].flat().filter((p) => p.usdPrice > 0)
241
+ if (toFetchFromLlama.length > 0) res = res.concat(await getPricesFromLlama(toFetchFromLlama, chainId))
176
242
 
177
243
  // Use WBTC price for WBTC18
178
- const wbtc = prices.find((p) => equalTlc(p.address, tokenWithId('wbtc', 1)?.address!))
244
+ const wbtc = res.find((p) => equalTlc(p.address, tokenWithId('wbtc', 1)?.address!))
179
245
  if (wbtc) {
180
246
  const wbtc18 = tokenWithId('wbtc18', 1)!
181
- prices.push({ symbol: wbtc18.symbol, address: wbtc18.address, usdPrice: wbtc.usdPrice })
247
+ res.push({ symbol: wbtc18.symbol, address: wbtc18.address, usdPrice: wbtc.usdPrice })
182
248
  }
183
249
 
184
- return prices
250
+ return res
185
251
  }
186
252
 
253
+ // ********************************************************************************
254
+ // ******** ********
255
+ // ******** GLOBAL ********
256
+ // ******** ********
257
+ // ********************************************************************************
258
+
259
+ export const fetchPrices = async (tokensToFetch: TokenToFetchWithChainId[] = tokens) => {
260
+ // Fetch on chain first
261
+ let prices: Price[] = await getOnChainPrices(tokensToFetch)
262
+
263
+ // Fetch from missing tokens from llama next
264
+ const pricesToFetchFromLlama = tokensToFetch
265
+ .map((t) => ({ ...t, usdPrice: prices.find((pl) => equalTlc(pl.address, t.address))?.usdPrice || 0 }))
266
+ .filter((t) => t.usdPrice === 0)
267
+
268
+ if (pricesToFetchFromLlama.length > 0) {
269
+ const llamaChunkedTokens = chunk(pricesToFetchFromLlama, 130)
270
+
271
+ for (const tokenChunk of llamaChunkedTokens) {
272
+ const httpArgs = tokenChunk.map((t) => `${getLlamaTokenPrefix(t.chainId)}:${t.address}`).toString()
273
+ const httpRequest = await fetch(`${LLAMA_API_URL}/prices/current/${httpArgs}`).then((res) => res.json())
274
+ const coinsData = httpRequest.coins
275
+
276
+ prices = prices.concat(
277
+ tokenChunk.map((t) => ({
278
+ symbol: t.symbol,
279
+ address: t.address,
280
+ usdPrice: coinsData[`${getLlamaTokenPrefix(t.chainId)}:${t.address}`]?.price || 0,
281
+ })),
282
+ )
283
+ }
284
+ }
285
+
286
+ const forcePrices = await Promise.all(
287
+ Object.keys(FORCE_GECKO_TERMINAL_TOKENS).map((chainId) =>
288
+ getPricesFromGeckoTerminal(FORCE_GECKO_TERMINAL_TOKENS[chainId], Number(chainId), []),
289
+ ),
290
+ ).then((res) => res.flat())
291
+
292
+ return [...forcePrices, ...prices]
293
+ }
294
+
295
+ // ********************************************************************************
296
+ // ******** ********
297
+ // ******** UTILS ********
298
+ // ******** ********
299
+ // ********************************************************************************
300
+
187
301
  export const mergePrices = async (basePrices: Price[], tokens: TokenToFetch[], chainId = 1): Promise<Price[]> => {
188
302
  let fetchedPrices: Price[] = []
189
303
  if (tokens.length > 0) {
@@ -14,11 +14,9 @@ import {
14
14
  tokenWithId,
15
15
  } from '@stake-dao/constants'
16
16
  import { batchBalancerStrats } from '../../bytecodes/index.js'
17
- import { concatBytecode, getBoost, getLogsFromEtherscan, getPricesFromLlama, getSdtApr } from '../../index.js'
17
+ import { concatBytecode, getBoost, getPricesFromLlama, getSdtApr } from '../../index.js'
18
18
  import { equalTlc, graphql } from '../../utils.js'
19
- import { FACTORY_EVENT_TOPIC } from '../curve/endpoints.js'
20
19
  import type { BalancerGlobalData, RewardsData, Strategy, StrategyData, ValidChainId } from '../types.js'
21
- import decodeEtherscanFactoryEvent from '../utils/decodeEtherscanFactoryEvent.js'
22
20
  import { getAprBreakdown } from '../utils/getAprBreakdown.js'
23
21
  import getTokenTypes from '../utils/getTokenTypes.js'
24
22
  import { buildBalancerStrategies } from './build.js'
@@ -26,43 +24,17 @@ import { BALANCER_POOLS_DATA_QUERY, BALANCER_SUBGRAPH_URL } from './endpoints.js
26
24
 
27
25
  interface TFetchBalancer {
28
26
  provider: any
29
- explorerApiKey: string
30
27
  chainId: ValidChainId
31
28
  sdtEmissionData: any
32
29
  }
33
30
 
34
- export const fetchBalancer = async ({
35
- provider,
36
- explorerApiKey,
37
- chainId,
38
- sdtEmissionData,
39
- }: TFetchBalancer): Promise<StrategyData> => {
31
+ export const fetchBalancer = async ({ provider, chainId, sdtEmissionData }: TFetchBalancer): Promise<StrategyData> => {
40
32
  const currentBlockNumber = Number(await provider.getBlockNumber())
41
- const fromBlock = balancerStrats.meta.lastSyncBlock[chainId]! + 1
42
33
  const toBlock = Number(await provider.getBlockNumber())
43
34
 
44
- const httpCalls = [
45
- // Etherscan Events
46
- getLogsFromEtherscan({
47
- chainId,
48
- address: contracts.balancerVaultFactory![1]!,
49
- apikey: explorerApiKey,
50
- extraQueryParams: {
51
- topic0: FACTORY_EVENT_TOPIC,
52
- fromBlock: `${fromBlock}`,
53
- toBlock: `${toBlock}`,
54
- },
55
- }),
56
- ]
57
-
58
- const httpResponses = (await Promise.allSettled(httpCalls)).map((result) =>
59
- result.status === 'fulfilled' ? result.value : [],
60
- )
61
-
62
- const newVaultsAndLp = decodeEtherscanFactoryEvent(httpResponses[0])
63
35
  const vaultsAndLp = balancerStrats.strats[chainId] || []
64
36
 
65
- const strats: any[] = await buildBalancerStrategies(provider, vaultsAndLp.concat(newVaultsAndLp), chainId)
37
+ const strats: any[] = await buildBalancerStrategies(provider, vaultsAndLp, chainId)
66
38
 
67
39
  const poolIds = strats.map((s) => s.key)
68
40
  const tokensToFetch: any = [tokenWithId('bal'), tokenWithId('sdt')]
@@ -80,7 +80,7 @@ export const parseV2Strats = (global: any, rawStrats: any[], extra: any) => {
80
80
  }))
81
81
 
82
82
  // Compute rewards from the hook incentive (Votemarket)
83
- const hookIncentivesPrices = extra?.hookIncentivesPrices || []
83
+ const hookIncentivesPrices = extra?.baseRewardsPrices || []
84
84
  const gaugeUsd = Number(s.gauge.totalSupplyUSD)
85
85
 
86
86
  const incentivesByToken = (extra?.hookIncentives || [])
@@ -116,7 +116,11 @@ export const parseV2Strats = (global: any, rawStrats: any[], extra: any) => {
116
116
  const hookIncentives = Object.values(incentivesByToken).map((group: any) => {
117
117
  const { meta, price, totalYearlyUsd, maxPeriodFinish } = group
118
118
 
119
- const apr = gaugeUsd > 0 ? (totalYearlyUsd / gaugeUsd) * 100 : 0
119
+ let _gaugeUsd = gaugeUsd
120
+ if (_gaugeUsd === 0) {
121
+ _gaugeUsd = 10_000
122
+ }
123
+ const apr = _gaugeUsd > 0 ? (totalYearlyUsd / _gaugeUsd) * 100 : 0
120
124
 
121
125
  return {
122
126
  token: parseAsset({