@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.
- package/dist/esm/bytecodes/index.js +1 -0
- package/dist/esm/bytecodes/index.js.map +1 -1
- package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js +1 -1
- package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js.map +1 -1
- package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js +1 -1
- package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js.map +1 -1
- package/dist/esm/bytecodes/votemarket/batchDirectIncentives.js +17 -0
- package/dist/esm/bytecodes/votemarket/batchDirectIncentives.js.map +1 -0
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/prices.js +178 -85
- package/dist/esm/prices.js.map +1 -1
- package/dist/esm/strategies/balancer/fetch.js +3 -21
- package/dist/esm/strategies/balancer/fetch.js.map +1 -1
- package/dist/esm/strategies/v2/parse.js +6 -2
- package/dist/esm/strategies/v2/parse.js.map +1 -1
- package/dist/esm/votemarket/balancer/fetchUserVlAuraClaimable.js +96 -0
- package/dist/esm/votemarket/balancer/fetchUserVlAuraClaimable.js.map +1 -0
- package/dist/esm/votemarket/fetchDirectIncentives.js +20 -0
- package/dist/esm/votemarket/fetchDirectIncentives.js.map +1 -0
- package/dist/types/bytecodes/index.d.ts +1 -0
- package/dist/types/bytecodes/index.d.ts.map +1 -1
- package/dist/types/bytecodes/votemarket/batchDirectIncentives.d.ts +4 -0
- package/dist/types/bytecodes/votemarket/batchDirectIncentives.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/prices.d.ts +17 -5
- package/dist/types/prices.d.ts.map +1 -1
- package/dist/types/strategies/balancer/fetch.d.ts +1 -2
- package/dist/types/strategies/balancer/fetch.d.ts.map +1 -1
- package/dist/types/strategies/v2/parse.d.ts.map +1 -1
- package/dist/types/votemarket/balancer/fetchUserVlAuraClaimable.d.ts +19 -0
- package/dist/types/votemarket/balancer/fetchUserVlAuraClaimable.d.ts.map +1 -0
- package/dist/types/votemarket/fetchDirectIncentives.d.ts +2 -0
- package/dist/types/votemarket/fetchDirectIncentives.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/bytecodes/index.ts +3 -0
- package/src/bytecodes/strategies/batches/batchBalancerStrats.ts +1 -1
- package/src/bytecodes/strategies/builds/buildBalancerStrats.ts +1 -1
- package/src/bytecodes/votemarket/batchDirectIncentives.ts +21 -0
- package/src/index.ts +8 -1
- package/src/prices.ts +206 -92
- package/src/strategies/balancer/fetch.ts +3 -31
- package/src/strategies/v2/parse.ts +6 -2
- package/src/votemarket/balancer/fetchUserVlAuraClaimable.ts +159 -0
- 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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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:
|
|
120
|
-
chainId =
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
159
|
-
|
|
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
|
|
164
|
-
.map((t) => {
|
|
165
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
241
|
+
if (toFetchFromLlama.length > 0) res = res.concat(await getPricesFromLlama(toFetchFromLlama, chainId))
|
|
176
242
|
|
|
177
243
|
// Use WBTC price for WBTC18
|
|
178
|
-
const wbtc =
|
|
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
|
-
|
|
247
|
+
res.push({ symbol: wbtc18.symbol, address: wbtc18.address, usdPrice: wbtc.usdPrice })
|
|
182
248
|
}
|
|
183
249
|
|
|
184
|
-
return
|
|
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,
|
|
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
|
|
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?.
|
|
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
|
-
|
|
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({
|