abel-ghost-sdk 0.0.1
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/README.md +11 -0
- package/dist/examples/assets.d.ts +1 -0
- package/dist/examples/assets.js +14 -0
- package/dist/examples/deployed.d.ts +1 -0
- package/dist/examples/deployed.js +31 -0
- package/dist/examples/run.d.ts +1 -0
- package/dist/examples/run.js +48 -0
- package/dist/examples/single.d.ts +1 -0
- package/dist/examples/single.js +21 -0
- package/dist/generated/AbelReaderSDK.d.ts +729 -0
- package/dist/generated/AbelReaderSDK.js +511 -0
- package/dist/generated/RetiReaderSDK.d.ts +3236 -0
- package/dist/generated/RetiReaderSDK.js +1773 -0
- package/dist/generated/sdk.d.ts +2474 -0
- package/dist/generated/sdk.js +1388 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +45 -0
- package/dist/utils/chunk.d.ts +1 -0
- package/dist/utils/chunk.js +9 -0
- package/dist/utils/chunked.d.ts +7 -0
- package/dist/utils/chunked.js +35 -0
- package/package.json +37 -0
|
@@ -0,0 +1,1773 @@
|
|
|
1
|
+
import { getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56';
|
|
2
|
+
import { AppClient as _AppClient, } from '@algorandfoundation/algokit-utils/types/app-client';
|
|
3
|
+
import { AppFactory as _AppFactory } from '@algorandfoundation/algokit-utils/types/app-factory';
|
|
4
|
+
export const APP_SPEC = { "name": "RetiReader", "structs": { "AssetInfo": [{ "name": "assetId", "type": "uint64" }, { "name": "creator", "type": "address" }, { "name": "total", "type": "uint64" }, { "name": "decimals", "type": "uint8" }, { "name": "unitName", "type": "string" }, { "name": "name", "type": "string" }], "Constraints": [{ "name": "epochPayoutRoundsMin", "type": "uint64" }, { "name": "epochPayoutRoundsMax", "type": "uint64" }, { "name": "minPctToValidatorWFourDecimals", "type": "uint64" }, { "name": "maxPctToValidatorWFourDecimals", "type": "uint64" }, { "name": "minEntryStake", "type": "uint64" }, { "name": "maxAlgoPerPool", "type": "uint64" }, { "name": "maxAlgoPerValidator", "type": "uint64" }, { "name": "amtConsideredSaturated", "type": "uint64" }, { "name": "maxNodes", "type": "uint64" }, { "name": "maxPoolsPerNode", "type": "uint64" }, { "name": "maxStakersPerPool", "type": "uint64" }], "MbrAmounts": [{ "name": "addValidatorMbr", "type": "uint64" }, { "name": "addPoolMbr", "type": "uint64" }, { "name": "poolInitMbr", "type": "uint64" }, { "name": "addStakerMbr", "type": "uint64" }], "NodePoolAssignmentConfig": [{ "name": "nodes", "type": "(uint64[3])[8]" }], "PoolInfo": [{ "name": "poolAppId", "type": "uint64" }, { "name": "totalStakers", "type": "uint16" }, { "name": "totalAlgoStaked", "type": "uint64" }], "ValidatorConfig": [{ "name": "id", "type": "uint64" }, { "name": "owner", "type": "address" }, { "name": "manager", "type": "address" }, { "name": "nfdForInfo", "type": "uint64" }, { "name": "entryGatingType", "type": "uint8" }, { "name": "entryGatingAddress", "type": "address" }, { "name": "entryGatingAssets", "type": "uint64[4]" }, { "name": "gatingAssetMinBalance", "type": "uint64" }, { "name": "rewardTokenId", "type": "uint64" }, { "name": "rewardPerPayout", "type": "uint64" }, { "name": "epochRoundLength", "type": "uint32" }, { "name": "percentToValidator", "type": "uint32" }, { "name": "validatorCommissionAddress", "type": "address" }, { "name": "minEntryStake", "type": "uint64" }, { "name": "maxAlgoPerPool", "type": "uint64" }, { "name": "poolsPerNode", "type": "uint8" }, { "name": "sunsettingOn", "type": "uint64" }, { "name": "sunsettingTo", "type": "uint64" }], "ValidatorCurState": [{ "name": "numPools", "type": "uint16" }, { "name": "totalStakers", "type": "uint64" }, { "name": "totalAlgoStaked", "type": "uint64" }, { "name": "rewardTokenHeldBack", "type": "uint64" }], "MbrAmountsAndProtocolConstraints": [{ "name": "mbrAmounts", "type": "MbrAmounts" }, { "name": "constraints", "type": "Constraints" }], "Validator": [{ "name": "config", "type": "ValidatorConfig" }, { "name": "state", "type": "ValidatorCurState" }, { "name": "poolInfo", "type": "(uint64,uint16,uint64)[]" }, { "name": "nodeAssignment", "type": "NodePoolAssignmentConfig" }], "ValidatorPoolInfo": [{ "name": "validatorId", "type": "uint64" }, { "name": "poolInfo", "type": "PoolInfo" }] }, "methods": [{ "name": "getMbrAmountsAndProtocolConstraints", "args": [{ "type": "uint64", "name": "registryAppId" }], "returns": { "type": "((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))", "struct": "MbrAmountsAndProtocolConstraints" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getValidatorConfig", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", "struct": "ValidatorConfig" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getValidatorStates", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "(uint16,uint64,uint64,uint64)", "struct": "ValidatorCurState" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPools", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "(uint64,(uint64,uint16,uint64))", "struct": "ValidatorPoolInfo" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getNodePoolAssignments", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "((uint64[3])[8])", "struct": "NodePoolAssignmentConfig" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getValidators", "args": [{ "type": "uint64", "name": "registryAppId" }, { "type": "uint64[]", "name": "validatorIds" }], "returns": { "type": "((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))", "struct": "Validator" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getBlockTimestamps", "args": [{ "type": "uint64", "name": "num" }], "returns": { "type": "uint64" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAlgodVersion", "args": [{ "type": "uint64[]", "name": "poolAppIds" }], "returns": { "type": "string" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAssets", "args": [{ "type": "uint64[]", "name": "assetIds" }], "returns": { "type": "(uint64,address,uint64,uint8,string,string)", "struct": "AssetInfo" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getPoolBalancesAndLastPayouts", "args": [{ "type": "uint64[]", "name": "poolAppIds" }], "returns": { "type": "(uint64,uint64)" }, "actions": { "create": ["NoOp"], "call": ["NoOp"] }, "readonly": true, "events": [], "recommendations": {} }], "arcs": [22, 28], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": ["DeleteApplication", "UpdateApplication"] }, "sourceInfo": { "approval": { "sourceInfo": [{ "pc": [193, 235, 2053, 2106, 2158, 2217], "errorMessage": "Bytes has valid prefix" }, { "pc": [53], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [142], "errorMessage": "OnCompletion must be one of UpdateApplication, DeleteApplication && can only call when not creating" }, { "pc": [1954], "errorMessage": "application exists" }, { "pc": [1814, 1819, 1833, 1838], "errorMessage": "asset exists" }, { "pc": [723], "errorMessage": "index access is out of bounds" }, { "pc": [266, 580, 651, 694, 764, 1028, 1668, 1760, 1918, 2161], "errorMessage": "invalid array length header" }, { "pc": [241], "errorMessage": "invalid number of bytes for Constraints" }, { "pc": [199], "errorMessage": "invalid number of bytes for MbrAmounts" }, { "pc": [2224], "errorMessage": "invalid number of bytes for NodePoolAssignmentConfig" }, { "pc": [2060], "errorMessage": "invalid number of bytes for ValidatorConfig" }, { "pc": [2112], "errorMessage": "invalid number of bytes for ValidatorCurState" }, { "pc": [2171], "errorMessage": "invalid number of bytes for arc4.dynamic_array<PoolInfo>" }, { "pc": [1929], "errorMessage": "invalid number of bytes for arc4.dynamic_array<application>" }, { "pc": [1771], "errorMessage": "invalid number of bytes for arc4.dynamic_array<asset>" }, { "pc": [277, 591, 662, 775, 1039, 1679], "errorMessage": "invalid number of bytes for arc4.dynamic_array<uint64>" }, { "pc": [156, 258, 572, 643, 756, 1020, 1613], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [1825], "errorMessage": "overflow" }], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEgMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gZXhwb3J0IGNsYXNzIFJldGlSZWFkZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZG1pbk9ubHlAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICBwdXNoYnl0ZXNzIDB4ZDdiZjg0NDUgMHg4NGM0NDI1YSAweDI0ZTAwYzgwIDB4YmI4ODI5MjcgMHhhNjJmMTEzMiAweGMyYzk4YTZiIDB4M2QzYjhiNGEgMHhiYjQ2MGJlZSAweDBjYzI5ZGQ4IDB4ZjE5NGVjNzkgLy8gbWV0aG9kICJnZXRNYnJBbW91bnRzQW5kUHJvdG9jb2xDb25zdHJhaW50cyh1aW50NjQpKCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSkiLCBtZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQsdWludDY0W10pKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJnZXRWYWxpZGF0b3JTdGF0ZXModWludDY0LHVpbnQ2NFtdKSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJnZXRQb29scyh1aW50NjQsdWludDY0W10pKHVpbnQ2NCwodWludDY0LHVpbnQxNix1aW50NjQpKSIsIG1ldGhvZCAiZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh1aW50NjQsdWludDY0W10pKCh1aW50NjRbM10pWzhdKSIsIG1ldGhvZCAiZ2V0VmFsaWRhdG9ycyh1aW50NjQsdWludDY0W10pKCh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSwodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQxNix1aW50NjQpW10sKCh1aW50NjRbM10pWzhdKSkiLCBtZXRob2QgImdldEJsb2NrVGltZXN0YW1wcyh1aW50NjQpdWludDY0IiwgbWV0aG9kICJnZXRBbGdvZFZlcnNpb24odWludDY0W10pc3RyaW5nIiwgbWV0aG9kICJnZXRBc3NldHModWludDY0W10pKHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCx1aW50OCxzdHJpbmcsc3RyaW5nKSIsIG1ldGhvZCAiZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHModWludDY0W10pKHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggZ2V0TWJyQW1vdW50c0FuZFByb3RvY29sQ29uc3RyYWludHMgZ2V0VmFsaWRhdG9yQ29uZmlnIGdldFZhbGlkYXRvclN0YXRlcyBnZXRQb29scyBnZXROb2RlUG9vbEFzc2lnbm1lbnRzIGdldFZhbGlkYXRvcnMgZ2V0QmxvY2tUaW1lc3RhbXBzIGdldEFsZ29kVmVyc2lvbiBnZXRBc3NldHMgZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHMKICAgIGVycgoKbWFpbl9hZG1pbk9ubHlAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsiVXBkYXRlQXBwbGljYXRpb24iLCAiRGVsZXRlQXBwbGljYXRpb24iXSB9KQogICAgaW50Y18yIC8vIDEKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHNobAogICAgcHVzaGludCA0OCAvLyA0OAogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIFVwZGF0ZUFwcGxpY2F0aW9uLCBEZWxldGVBcHBsaWNhdGlvbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcyk7CiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsiVXBkYXRlQXBwbGljYXRpb24iLCAiRGVsZXRlQXBwbGljYXRpb24iXSB9KQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0TWJyQW1vdW50c0FuZFByb3RvY29sQ29uc3RyYWludHNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRNYnJBbW91bnRzQW5kUHJvdG9jb2xDb25zdHJhaW50czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1OC02MAogICAgLy8gY29uc3QgbWJyQW1vdW50cyA9IHJldGkuY2FsbC5nZXRNYnJBbW91bnRzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hieXRlcyAweDhhODcxNDJkIC8vIG1ldGhvZCAiZ2V0TWJyQW1vdW50cygpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgTWJyQW1vdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6NjItNjQKICAgIC8vIGNvbnN0IGNvbnN0cmFpbnRzID0gcmV0aS5jYWxsLmdldFByb3RvY29sQ29uc3RyYWludHMoewogICAgLy8gICBhcHBJZDogcmVnaXN0cnlBcHBJZCwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgcHVzaGJ5dGVzIDB4ZDEzNjZjYzMgLy8gbWV0aG9kICJnZXRQcm90b2NvbENvbnN0cmFpbnRzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgODggLy8gODgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIENvbnN0cmFpbnRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gbG9nKGVuY29kZUFyYzQoeyBtYnJBbW91bnRzLCBjb25zdHJhaW50cyB9KSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFZhbGlkYXRvckNvbmZpZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFZhbGlkYXRvckNvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgaW50Y18wIC8vIDAKCmdldFZhbGlkYXRvckNvbmZpZ19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldFZhbGlkYXRvckNvbmZpZ19hZnRlcl9mb3JANQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBsb2coZW5jb2RlQXJjNCh0aGlzLmdldFJlbW90ZVZhbGlkYXRvckNvbmZpZyhyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCkpKTsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvckNvbmZpZwogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldFZhbGlkYXRvckNvbmZpZ19mb3JfaGVhZGVyQDIKCmdldFZhbGlkYXRvckNvbmZpZ19hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgYmFzZTMyKENVUFhZNUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRWYWxpZGF0b3JTdGF0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRWYWxpZGF0b3JTdGF0ZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0VmFsaWRhdG9yU3RhdGVzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldFZhbGlkYXRvclN0YXRlc19hZnRlcl9mb3JANQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gbG9nKGVuY29kZUFyYzQodGhpcy5nZXRSZW1vdGVWYWxpZGF0b3JTdGF0ZShyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCkpKTsKICAgIGRpZyA1CiAgICBzd2FwCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvclN0YXRlCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0VmFsaWRhdG9yU3RhdGVzX2Zvcl9oZWFkZXJAMgoKZ2V0VmFsaWRhdG9yU3RhdGVzX2FmdGVyX2ZvckA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRQb29sc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFBvb2xzOgogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0UG9vbHNfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBmb3IgKGNvbnN0IHZhbGlkYXRvcklkIG9mIHZhbGlkYXRvcklkcykgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZ2V0UG9vbHNfYWZ0ZXJfZm9yQDkKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE0MAogICAgLy8gY29uc3QgcG9vbEluZm9BcnIgPSB0aGlzLmdldFJlbW90ZVBvb2xJbmZvKHJlZ2lzdHJ5QXBwSWQsIHZhbGlkYXRvcklkKTsKICAgIGRpZyA0CiAgICBzd2FwCiAgICBjYWxsc3ViIGdldFJlbW90ZVBvb2xJbmZvCiAgICBkdXAKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBmb3IgKGNvbnN0IHBvb2xJbmZvIG9mIGNsb25lKHBvb2xJbmZvQXJyKSkgewogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgNwogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNgoKZ2V0UG9vbHNfZm9yX2hlYWRlckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBmb3IgKGNvbnN0IHBvb2xJbmZvIG9mIGNsb25lKHBvb2xJbmZvQXJyKSkgewogICAgZGlnIDUKICAgIGRpZyA3CiAgICA8CiAgICBieiBnZXRQb29sc19hZnRlcl9mb3JANwogICAgZGlnIDcKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDE4IC8vIDE4CiAgICAqCiAgICBwdXNoaW50IDE4IC8vIDE4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gbG9nKGVuY29kZUFyYzQoeyB2YWxpZGF0b3JJZCwgcG9vbEluZm8gfSkpOwogICAgZGlnIDYKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgYnVyeSA2CiAgICBiIGdldFBvb2xzX2Zvcl9oZWFkZXJANAoKZ2V0UG9vbHNfYWZ0ZXJfZm9yQDc6CiAgICBkdXAKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0UG9vbHNfZm9yX2hlYWRlckAyCgpnZXRQb29sc19hZnRlcl9mb3JAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldE5vZGVQb29sQXNzaWdubWVudHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIGZvciAoY29uc3QgdmFsaWRhdG9ySWQgb2YgdmFsaWRhdG9ySWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXROb2RlUG9vbEFzc2lnbm1lbnRzX2FmdGVyX2ZvckA1CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBsb2coZW5jb2RlQXJjNCh0aGlzLmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHMocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpKSk7CiAgICBkaWcgNQogICAgc3dhcAogICAgY2FsbHN1YiBnZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgZ2V0Tm9kZVBvb2xBc3NpZ25tZW50c19mb3JfaGVhZGVyQDIKCmdldE5vZGVQb29sQXNzaWdubWVudHNfYWZ0ZXJfZm9yQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRWYWxpZGF0b3JzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0VmFsaWRhdG9yczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgaW50Y18zIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIGludGNfMCAvLyAwCgpnZXRWYWxpZGF0b3JzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gZm9yIChjb25zdCB2YWxpZGF0b3JJZCBvZiB2YWxpZGF0b3JJZHMpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGdldFZhbGlkYXRvcnNfYWZ0ZXJfZm9yQDUKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxOTQKICAgIC8vIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0UmVtb3RlVmFsaWRhdG9yQ29uZmlnKHJlZ2lzdHJ5QXBwSWQsIHZhbGlkYXRvcklkKTsKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGRpZyAxCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvckNvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpOwogICAgZGlnIDIKICAgIGRpZyAyCiAgICBjYWxsc3ViIGdldFJlbW90ZVZhbGlkYXRvclN0YXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxOTYKICAgIC8vIGNvbnN0IHBvb2xJbmZvID0gdGhpcy5nZXRSZW1vdGVQb29sSW5mbyhyZWdpc3RyeUFwcElkLCB2YWxpZGF0b3JJZCk7CiAgICBkaWcgMwogICAgZGlnIDMKICAgIGNhbGxzdWIgZ2V0UmVtb3RlUG9vbEluZm8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gY29uc3Qgbm9kZUFzc2lnbm1lbnQgPSB0aGlzLmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHMocmVnaXN0cnlBcHBJZCwgdmFsaWRhdG9ySWQpOwogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNhbGxzdWIgZ2V0UmVtb3RlTm9kZVBvb2xBc3NpZ25tZW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTk5LTIwNAogICAgLy8gY29uc3QgYWxsUG9vbEluZm86IFZhbGlkYXRvciA9IHsKICAgIC8vICAgY29uZmlnOiBjbG9uZShjb25maWcpLAogICAgLy8gICBzdGF0ZTogY2xvbmUoc3RhdGUpLAogICAgLy8gICBwb29sSW5mbzogY2xvbmUocG9vbEluZm8pLAogICAgLy8gICBub2RlQXNzaWdubWVudDogY2xvbmUobm9kZUFzc2lnbm1lbnQpLAogICAgLy8gfTsKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAxY2UKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gbG9nKGVuY29kZUFyYzQoYWxsUG9vbEluZm8pKTsKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRWYWxpZGF0b3JzX2Zvcl9oZWFkZXJAMgoKZ2V0VmFsaWRhdG9yc19hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgcHVzaGJ5dGVzIGJhc2UzMihDVVBYWTVJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRFRRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBKQogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0QmxvY2tUaW1lc3RhbXBzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0QmxvY2tUaW1lc3RhbXBzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIGZvciAobGV0IHJvdW5kOiB1aW50NjQgPSBUeG4ubGFzdFZhbGlkIC0gbnVtIC0gMTsgcm91bmQgPCBUeG4uZmlyc3RWYWxpZCAtIDE7IHJvdW5kKyspIHsKICAgIHR4biBMYXN0VmFsaWQKICAgIHN3YXAKICAgIC0KICAgIGludGNfMiAvLyAxCiAgICAtCgpnZXRCbG9ja1RpbWVzdGFtcHNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIGZvciAobGV0IHJvdW5kOiB1aW50NjQgPSBUeG4ubGFzdFZhbGlkIC0gbnVtIC0gMTsgcm91bmQgPCBUeG4uZmlyc3RWYWxpZCAtIDE7IHJvdW5kKyspIHsKICAgIHR4biBGaXJzdFZhbGlkCiAgICBpbnRjXzIgLy8gMQogICAgLQogICAgZGlnIDEKICAgID4KICAgIGJ6IGdldEJsb2NrVGltZXN0YW1wc19hZnRlcl93aGlsZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGxvZyhvcC5CbG9jay5ibGtUaW1lc3RhbXAocm91bmQpKTsKICAgIGR1cG4gMgogICAgYmxvY2sgQmxrVGltZXN0YW1wCiAgICBpdG9iCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gZm9yIChsZXQgcm91bmQ6IHVpbnQ2NCA9IFR4bi5sYXN0VmFsaWQgLSBudW0gLSAxOyByb3VuZCA8IFR4bi5maXJzdFZhbGlkIC0gMTsgcm91bmQrKykgewogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRCbG9ja1RpbWVzdGFtcHNfd2hpbGVfdG9wQDIKCmdldEJsb2NrVGltZXN0YW1wc19hZnRlcl93aGlsZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwMDAKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldEFsZ29kVmVyc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEFsZ29kVmVyc2lvbjoKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMjQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx1aW50NjQ+CiAgICBpbnRjXzAgLy8gMAoKZ2V0QWxnb2RWZXJzaW9uX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gZm9yIChjb25zdCBwb29sQXBwSWQgb2YgcG9vbEFwcElkcykgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2ZvckA4CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gY29uc3QgW2FsZ29kVmVyLCBleGlzdHNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMocG9vbEFwcElkLCBCeXRlc2BhbGdvZFZlcmApOwogICAgcHVzaGJ5dGVzICJhbGdvZFZlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIyOAogICAgLy8gaWYgKGV4aXN0cykgewogICAgYnogZ2V0QWxnb2RWZXJzaW9uX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIGxvZyhlbmNvZGVBcmM0KGFsZ29kVmVyKSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2lmX2Vsc2VANjoKICAgIGR1cAogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRBbGdvZFZlcnNpb25fZm9yX2hlYWRlckAyCgpnZXRBbGdvZFZlcnNpb25fZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIGxvZyhlbmNvZGVBcmM0KCIiKSk7CiAgICBwdXNoYnl0ZXMgMHgwMDAwCiAgICBsb2cKICAgIGIgZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2lmX2Vsc2VANgoKZ2V0QWxnb2RWZXJzaW9uX2FmdGVyX2ZvckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG9uQ3JlYXRlOiAiYWxsb3ciIH0pCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldEFzc2V0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEFzc2V0czoKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhc3NldD4KICAgIGludGNfMCAvLyAwCgpnZXRBc3NldHNfZm9yX2hlYWRlckAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjM5CiAgICAvLyBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0SWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRBc3NldHNfYWZ0ZXJfZm9yQDgKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMSAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDAKICAgIC8vIGNvbnN0IFtjcmVhdG9yLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRDcmVhdG9yKGFzc2V0LmlkKTsKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICBzd2FwCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI0MQogICAgLy8gaWYgKCFleGlzdHMpIHsKICAgIGJueiBnZXRBc3NldHNfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gbG9nKGVuY29kZUFyYzQodGhpcy5nZXRFbXB0eUFzc2V0SW5mbyhhc3NldC5pZCkpKTsKICAgIGNhbGxzdWIgZ2V0RW1wdHlBc3NldEluZm8KICAgIGxvZwoKZ2V0QXNzZXRzX2FmdGVyX2lmX2Vsc2VANjoKICAgIGR1cAogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBnZXRBc3NldHNfZm9yX2hlYWRlckAyCgpnZXRBc3NldHNfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIHRvdGFsOiBhc3NldC50b3RhbCwKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIGRlY2ltYWxzOiBuZXcgVWludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZGlnIDEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB1bml0TmFtZTogYXNzZXQudW5pdE5hbWUudG9TdHJpbmcoKSwKICAgIGRpZyAyCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gbmFtZTogYXNzZXQubmFtZS50b1N0cmluZygpLAogICAgZGlnIDMKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNDQtMjUxCiAgICAvLyBjb25zdCBhc3NldEluZm86IEFzc2V0SW5mbyA9IHsKICAgIC8vICAgYXNzZXRJZDogYXNzZXQuaWQsCiAgICAvLyAgIGNyZWF0b3I6IGNyZWF0b3IsCiAgICAvLyAgIHRvdGFsOiBhc3NldC50b3RhbCwKICAgIC8vICAgZGVjaW1hbHM6IG5ldyBVaW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyAgIHVuaXROYW1lOiBhc3NldC51bml0TmFtZS50b1N0cmluZygpLAogICAgLy8gICBuYW1lOiBhc3NldC5uYW1lLnRvU3RyaW5nKCksCiAgICAvLyB9OwogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBkaWcgOAogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAzNQogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDUzIC8vIDUzCiAgICArCiAgICBkaWcgMwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBsb2coZW5jb2RlQXJjNChhc3NldEluZm8pKTsKICAgIGxvZwogICAgYiBnZXRBc3NldHNfYWZ0ZXJfaWZfZWxzZUA2CgpnZXRBc3NldHNfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIHJldHVybiB0aGlzLmdldEVtcHR5QXNzZXRJbmZvKDApOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZ2V0RW1wdHlBc3NldEluZm8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBvbkNyZWF0ZTogImFsbG93IiB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFBvb2xCYWxhbmNlc0FuZExhc3RQYXlvdXRzW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNjkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcHBsaWNhdGlvbj4KICAgIGludGNfMCAvLyAwCgpnZXRQb29sQmFsYW5jZXNBbmRMYXN0UGF5b3V0c19mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIGZvciAoY29uc3QgcG9vbEFwcCBvZiBwb29sQXBwSWRzKSB7CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBnZXRQb29sQmFsYW5jZXNBbmRMYXN0UGF5b3V0c19hZnRlcl9mb3JANQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gY29uc3QgYmFsYW5jZSA9IG9wLmJhbGFuY2UocG9vbEFwcC5hZGRyZXNzKTsKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgYmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBjb25zdCBbbGFzdFBheW91dF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQocG9vbEFwcCwgQnl0ZXNgbGFzdFBheW91dGApOwogICAgc3dhcAogICAgcHVzaGJ5dGVzICJsYXN0UGF5b3V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyBsb2coZW5jb2RlQXJjNChbYmFsYW5jZSwgbGFzdFBheW91dF0gYXMgQmFsYW5jZUFuZExhc3RQYXlvdXQpKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldFBvb2xCYWxhbmNlc0FuZExhc3RQYXlvdXRzX2Zvcl9oZWFkZXJAMgoKZ2V0UG9vbEJhbGFuY2VzQW5kTGFzdFBheW91dHNfYWZ0ZXJfZm9yQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNjkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgb25DcmVhdGU6ICJhbGxvdyIgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjpSZXRpUmVhZGVyLmdldFJlbW90ZVZhbGlkYXRvckNvbmZpZyhyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRSZW1vdGVWYWxpZGF0b3JDb25maWc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHJpdmF0ZSBnZXRSZW1vdGVWYWxpZGF0b3JDb25maWcocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogVmFsaWRhdG9yQ29uZmlnIHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6ODMtODYKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvckNvbmZpZyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6ODMtODYKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvckNvbmZpZyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3NWFmZjYxZCAvLyBtZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDI0MiAvLyAyNDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIFZhbGlkYXRvckNvbmZpZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KSAtPiBieXRlczoKZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjAKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlVmFsaWRhdG9yU3RhdGUocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogVmFsaWRhdG9yQ3VyU3RhdGUgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjEtMTI0CiAgICAvLyByZXR1cm4gY29tcGlsZUFyYzQoUmV0aSkuY2FsbC5nZXRWYWxpZGF0b3JTdGF0ZSh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjEyMS0xMjQKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFZhbGlkYXRvclN0YXRlKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweDFmMmYwMTA5IC8vIG1ldGhvZCAiZ2V0VmFsaWRhdG9yU3RhdGUodWludDY0KSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDI2IC8vIDI2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBWYWxpZGF0b3JDdXJTdGF0ZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6OlJldGlSZWFkZXIuZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KSAtPiBieXRlczoKZ2V0UmVtb3RlUG9vbEluZm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlUG9vbEluZm8ocmVnaXN0cnlBcHBJZDogdWludDY0LCB2YWxpZGF0b3JJZDogdWludDY0KTogUG9vbEluZm9bXSB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE1MC0xNTMKICAgIC8vIHJldHVybiBjb21waWxlQXJjNChSZXRpKS5jYWxsLmdldFBvb2xzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTUwLTE1MwogICAgLy8gcmV0dXJuIGNvbXBpbGVBcmM0KFJldGkpLmNhbGwuZ2V0UG9vbHMoewogICAgLy8gICBhcHBJZDogcmVnaXN0cnlBcHBJZCwKICAgIC8vICAgYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4OTEwZTk0YWMgLy8gbWV0aG9kICJnZXRQb29scyh1aW50NjQpKHVpbnQ2NCx1aW50MTYsdWludDY0KVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgICoKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8UG9vbEluZm8+CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRSZW1vdGVOb2RlUG9vbEFzc2lnbm1lbnRzKHJlZ2lzdHJ5QXBwSWQ6IHVpbnQ2NCwgdmFsaWRhdG9ySWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldFJlbW90ZU5vZGVQb29sQXNzaWdubWVudHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHByaXZhdGUgZ2V0UmVtb3RlTm9kZVBvb2xBc3NpZ25tZW50cyhyZWdpc3RyeUFwcElkOiB1aW50NjQsIHZhbGlkYXRvcklkOiB1aW50NjQpOiBOb2RlUG9vbEFzc2lnbm1lbnRDb25maWcgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoxNzYtMTc5CiAgICAvLyByZXR1cm4gY29tcGlsZUFyYzQoUmV0aSkuY2FsbC5nZXROb2RlUG9vbEFzc2lnbm1lbnRzKHsKICAgIC8vICAgYXBwSWQ6IHJlZ2lzdHJ5QXBwSWQsCiAgICAvLyAgIGFyZ3M6IFt2YWxpZGF0b3JJZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gYXJnczogW3ZhbGlkYXRvcklkXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MTc2LTE3OQogICAgLy8gcmV0dXJuIGNvbXBpbGVBcmM0KFJldGkpLmNhbGwuZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh7CiAgICAvLyAgIGFwcElkOiByZWdpc3RyeUFwcElkLAogICAgLy8gICBhcmdzOiBbdmFsaWRhdG9ySWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmJiNmM4ZCAvLyBtZXRob2QgImdldE5vZGVQb29sQXNzaWdubWVudHModWludDY0KSgodWludDY0WzNdKVs4XSkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTkyIC8vIDE5MgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgTm9kZVBvb2xBc3NpZ25tZW50Q29uZmlnCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czo6UmV0aVJlYWRlci5nZXRFbXB0eUFzc2V0SW5mbyhhc3NldElkOiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRFbXB0eUFzc2V0SW5mbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXRpX3JlYWRlci9jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gcHJpdmF0ZSBnZXRFbXB0eUFzc2V0SW5mbyhhc3NldElkOiB1aW50NjQpOiBBc3NldEluZm8gewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGNyZWF0b3I6IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjU5LTI2NgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgYXNzZXRJZDogYXNzZXRJZCwKICAgIC8vICAgY3JlYXRvcjogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICB0b3RhbDogMCwKICAgIC8vICAgZGVjaW1hbHM6IG5ldyBVaW50OCgwKSwKICAgIC8vICAgdW5pdE5hbWU6ICIiLAogICAgLy8gICBuYW1lOiAiIiwKICAgIC8vIH07CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JldGlfcmVhZGVyL2NvbnRyYWN0LmFsZ28udHM6MjYyCiAgICAvLyB0b3RhbDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV0aV9yZWFkZXIvY29udHJhY3QuYWxnby50czoyNTktMjY2CiAgICAvLyByZXR1cm4gewogICAgLy8gICBhc3NldElkOiBhc3NldElkLAogICAgLy8gICBjcmVhdG9yOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIHRvdGFsOiAwLAogICAgLy8gICBkZWNpbWFsczogbmV3IFVpbnQ4KDApLAogICAgLy8gICB1bml0TmFtZTogIiIsCiAgICAvLyAgIG5hbWU6ICIiLAogICAgLy8gfTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAwMDM1MDAzNzAwMDAwMDAwCiAgICBjb25jYXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAgBAiYCBBUffHUeFR98dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMRtBAFIxGRREggoE17+ERQSExEJaBCTgDIAEu4gpJwSmLxEyBMLJimsEPTuLSgS7RgvuBAzCndgE8ZTseTYaAI4KABIAeAGyAfQCagNyBcMF+gZWBvUAJDEZkIEwGjEYEEQxADIJEkM2GgFJFSMSRBexgASKhxQtshoishlJshiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYEgEkSxgATRNmzDshoishlMshiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYFYEkRQSbAoTFCwJEM2GgFJFSMSRBc2GgJHAiJZSU4CIwslCEwVEkQiSUsCDEEAG0sCVwIASwFJTgIjC1tLBUyIBqiwJAhFAUL/3oD2ARUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAkQzYaAUkVIxJEFzYaAkcCIllJTgIjCyUITBUSRCJJSwIMQQAbSwJXAgBLAUlOAiMLW0sFTIgFo7AkCEUBQv/eKbAkQyKAAEcCNhoBSRUjEkQXNhoCRwIiWUlOAiMLJQhMFRJEIklLAgxBAEpLAlcCAEsBIwtbSUUGSwRMiAWQSUUJIllFByJFBksFSwcMQQAdSwdXAgBLBklOAoESC4ESWEsGFkxQsCQIRQZC/9tJJAhFAUL/rymwJEM2GgFJFSMSRBc2GgJHAiJZSU4CIwslCEwVEkQiSUsCDEEAG0sCVwIASwFJTgIjC1tLBUyIBVqwJAhFAUL/3oDEARUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwJEM2GgFJFSMSRBc2GgJHAiJZSU4CIwslCEwVEkQiSUsCDEEAQksCVwIASwFJTgIjC1tLBUlOAksBiAOqSwJLAogD2EsDSwOIBAVPBE8EiAQ5TwNPA1CAAgHOUExQTFCwJAhFAUL/t4DmAxUffHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAALAkQzYaAUkVIxJEFzEETAkkCTECJAlLAQ1BAA1HAtEBFrAkCEUBQv/pgAwVH3x1AAAAAAAAAACwJEMiNhoBRwIiWUlOAiMLJQhMFRJEIklLAgxBADZLAlcCAEsBIwtbgAhhbGdvZFZlcmVMRQVBABNLA0kVFlcGAkxQsEkkCEUBQv/LgAIAALBC//CABhUffHUAALAkQyI2GgFHAiJZSU4CIwslCEwVEkQiSUsCDEEAeksCVwIASwEjC1tJcQtMRQZAAAyIAaiwSSQIRQFC/9pJcQBESwFxAUQWSZMjDkRXBwFLAnEDREsDcQRETwQWSwhQTwQWUE8DUEsCFRZXBgJPA1BMgAIANVBLARWBNQhLAxUWVwYCTwRQTBZXBgJPAkxQTwJQTFCwQv+dIogBQChMULAkQzYaAUcCIllJTgIjCyUITBUSRCJJSwIMQQAuSwJXAgBLAUlOAiMLW0lyCERgTIAKbGFzdFBheW91dGVITBZMFlCwJAhFAUL/y4AUFR98dQAAAAAAAAAAAAAAAAAAAACwJEOKAgGxi/8WgAR1r/YdshqyGiKyGYv+shiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJFYHyARJEiYoCAbGL/xaABB8vAQmyGrIaIrIZi/6yGIEGshAisgGztD5JVwQATFcABCgSREkVgRoSRImKAgGxi/8WgASRDpSsshqyGiKyGYv+shiBBrIQIrIBs7Q+SVcEAExXAAQoEkRJIlmBEgslCEsBFRJEiYoCAbGL/xaABHu7bI2yGrIaIrIZi/6yGIEGshAisgGztD5JVwQATFcABCgSREkVgcABEkSJigEBMgOL/xZMUCIWUIAJAAA1ADcAAAAAUIk=", "clear": "C4EBQw==" }, "events": [], "templateVariables": {} };
|
|
5
|
+
class BinaryStateValue {
|
|
6
|
+
value;
|
|
7
|
+
constructor(value) {
|
|
8
|
+
this.value = value;
|
|
9
|
+
}
|
|
10
|
+
asByteArray() {
|
|
11
|
+
return this.value;
|
|
12
|
+
}
|
|
13
|
+
asString() {
|
|
14
|
+
return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Converts the ABI tuple representation of a AssetInfo to the struct representation
|
|
19
|
+
*/
|
|
20
|
+
export function AssetInfoFromTuple(abiTuple) {
|
|
21
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetInfo, APP_SPEC.structs);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Converts the ABI tuple representation of a Constraints to the struct representation
|
|
25
|
+
*/
|
|
26
|
+
export function ConstraintsFromTuple(abiTuple) {
|
|
27
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.Constraints, APP_SPEC.structs);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Converts the ABI tuple representation of a MbrAmounts to the struct representation
|
|
31
|
+
*/
|
|
32
|
+
export function MbrAmountsFromTuple(abiTuple) {
|
|
33
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.MbrAmounts, APP_SPEC.structs);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Converts the ABI tuple representation of a NodePoolAssignmentConfig to the struct representation
|
|
37
|
+
*/
|
|
38
|
+
export function NodePoolAssignmentConfigFromTuple(abiTuple) {
|
|
39
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.NodePoolAssignmentConfig, APP_SPEC.structs);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Converts the ABI tuple representation of a PoolInfo to the struct representation
|
|
43
|
+
*/
|
|
44
|
+
export function PoolInfoFromTuple(abiTuple) {
|
|
45
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.PoolInfo, APP_SPEC.structs);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Converts the ABI tuple representation of a ValidatorConfig to the struct representation
|
|
49
|
+
*/
|
|
50
|
+
export function ValidatorConfigFromTuple(abiTuple) {
|
|
51
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorConfig, APP_SPEC.structs);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Converts the ABI tuple representation of a ValidatorCurState to the struct representation
|
|
55
|
+
*/
|
|
56
|
+
export function ValidatorCurStateFromTuple(abiTuple) {
|
|
57
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorCurState, APP_SPEC.structs);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Converts the ABI tuple representation of a MbrAmountsAndProtocolConstraints to the struct representation
|
|
61
|
+
*/
|
|
62
|
+
export function MbrAmountsAndProtocolConstraintsFromTuple(abiTuple) {
|
|
63
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.MbrAmountsAndProtocolConstraints, APP_SPEC.structs);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Converts the ABI tuple representation of a Validator to the struct representation
|
|
67
|
+
*/
|
|
68
|
+
export function ValidatorFromTuple(abiTuple) {
|
|
69
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.Validator, APP_SPEC.structs);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Converts the ABI tuple representation of a ValidatorPoolInfo to the struct representation
|
|
73
|
+
*/
|
|
74
|
+
export function ValidatorPoolInfoFromTuple(abiTuple) {
|
|
75
|
+
return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ValidatorPoolInfo, APP_SPEC.structs);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Exposes methods for constructing `AppClient` params objects for ABI calls to the RetiReader smart contract
|
|
79
|
+
*/
|
|
80
|
+
export class RetiReaderParamsFactory {
|
|
81
|
+
/**
|
|
82
|
+
* Gets available create ABI call param factories
|
|
83
|
+
*/
|
|
84
|
+
static get create() {
|
|
85
|
+
return {
|
|
86
|
+
_resolveByMethod(params) {
|
|
87
|
+
switch (params.method) {
|
|
88
|
+
case 'getMbrAmountsAndProtocolConstraints':
|
|
89
|
+
case 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))':
|
|
90
|
+
return RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params);
|
|
91
|
+
case 'getValidatorConfig':
|
|
92
|
+
case 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)':
|
|
93
|
+
return RetiReaderParamsFactory.create.getValidatorConfig(params);
|
|
94
|
+
case 'getValidatorStates':
|
|
95
|
+
case 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)':
|
|
96
|
+
return RetiReaderParamsFactory.create.getValidatorStates(params);
|
|
97
|
+
case 'getPools':
|
|
98
|
+
case 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))':
|
|
99
|
+
return RetiReaderParamsFactory.create.getPools(params);
|
|
100
|
+
case 'getNodePoolAssignments':
|
|
101
|
+
case 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])':
|
|
102
|
+
return RetiReaderParamsFactory.create.getNodePoolAssignments(params);
|
|
103
|
+
case 'getValidators':
|
|
104
|
+
case 'getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))':
|
|
105
|
+
return RetiReaderParamsFactory.create.getValidators(params);
|
|
106
|
+
case 'getBlockTimestamps':
|
|
107
|
+
case 'getBlockTimestamps(uint64)uint64':
|
|
108
|
+
return RetiReaderParamsFactory.create.getBlockTimestamps(params);
|
|
109
|
+
case 'getAlgodVersion':
|
|
110
|
+
case 'getAlgodVersion(uint64[])string':
|
|
111
|
+
return RetiReaderParamsFactory.create.getAlgodVersion(params);
|
|
112
|
+
case 'getAssets':
|
|
113
|
+
case 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)':
|
|
114
|
+
return RetiReaderParamsFactory.create.getAssets(params);
|
|
115
|
+
case 'getPoolBalancesAndLastPayouts':
|
|
116
|
+
case 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)':
|
|
117
|
+
return RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params);
|
|
118
|
+
}
|
|
119
|
+
throw new Error(`Unknown ' + verb + ' method`);
|
|
120
|
+
},
|
|
121
|
+
/**
|
|
122
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method
|
|
123
|
+
*
|
|
124
|
+
* @param params Parameters for the call
|
|
125
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
126
|
+
*/
|
|
127
|
+
getMbrAmountsAndProtocolConstraints(params) {
|
|
128
|
+
return {
|
|
129
|
+
...params,
|
|
130
|
+
method: 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))',
|
|
131
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId],
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method
|
|
136
|
+
*
|
|
137
|
+
* @param params Parameters for the call
|
|
138
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
139
|
+
*/
|
|
140
|
+
getValidatorConfig(params) {
|
|
141
|
+
return {
|
|
142
|
+
...params,
|
|
143
|
+
method: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
|
|
144
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
/**
|
|
148
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method
|
|
149
|
+
*
|
|
150
|
+
* @param params Parameters for the call
|
|
151
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
152
|
+
*/
|
|
153
|
+
getValidatorStates(params) {
|
|
154
|
+
return {
|
|
155
|
+
...params,
|
|
156
|
+
method: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
|
|
157
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
158
|
+
};
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method
|
|
162
|
+
*
|
|
163
|
+
* @param params Parameters for the call
|
|
164
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
165
|
+
*/
|
|
166
|
+
getPools(params) {
|
|
167
|
+
return {
|
|
168
|
+
...params,
|
|
169
|
+
method: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
|
|
170
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
/**
|
|
174
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method
|
|
175
|
+
*
|
|
176
|
+
* @param params Parameters for the call
|
|
177
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
178
|
+
*/
|
|
179
|
+
getNodePoolAssignments(params) {
|
|
180
|
+
return {
|
|
181
|
+
...params,
|
|
182
|
+
method: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
|
|
183
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
184
|
+
};
|
|
185
|
+
},
|
|
186
|
+
/**
|
|
187
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method
|
|
188
|
+
*
|
|
189
|
+
* @param params Parameters for the call
|
|
190
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
191
|
+
*/
|
|
192
|
+
getValidators(params) {
|
|
193
|
+
return {
|
|
194
|
+
...params,
|
|
195
|
+
method: 'getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))',
|
|
196
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
197
|
+
};
|
|
198
|
+
},
|
|
199
|
+
/**
|
|
200
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method
|
|
201
|
+
*
|
|
202
|
+
* @param params Parameters for the call
|
|
203
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
204
|
+
*/
|
|
205
|
+
getBlockTimestamps(params) {
|
|
206
|
+
return {
|
|
207
|
+
...params,
|
|
208
|
+
method: 'getBlockTimestamps(uint64)uint64',
|
|
209
|
+
args: Array.isArray(params.args) ? params.args : [params.args.num],
|
|
210
|
+
};
|
|
211
|
+
},
|
|
212
|
+
/**
|
|
213
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method
|
|
214
|
+
*
|
|
215
|
+
* @param params Parameters for the call
|
|
216
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
217
|
+
*/
|
|
218
|
+
getAlgodVersion(params) {
|
|
219
|
+
return {
|
|
220
|
+
...params,
|
|
221
|
+
method: 'getAlgodVersion(uint64[])string',
|
|
222
|
+
args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
|
|
223
|
+
};
|
|
224
|
+
},
|
|
225
|
+
/**
|
|
226
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method
|
|
227
|
+
*
|
|
228
|
+
* @param params Parameters for the call
|
|
229
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
230
|
+
*/
|
|
231
|
+
getAssets(params) {
|
|
232
|
+
return {
|
|
233
|
+
...params,
|
|
234
|
+
method: 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)',
|
|
235
|
+
args: Array.isArray(params.args) ? params.args : [params.args.assetIds],
|
|
236
|
+
};
|
|
237
|
+
},
|
|
238
|
+
/**
|
|
239
|
+
* Constructs create ABI call params for the RetiReader smart contract using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method
|
|
240
|
+
*
|
|
241
|
+
* @param params Parameters for the call
|
|
242
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
243
|
+
*/
|
|
244
|
+
getPoolBalancesAndLastPayouts(params) {
|
|
245
|
+
return {
|
|
246
|
+
...params,
|
|
247
|
+
method: 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)',
|
|
248
|
+
args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
|
|
249
|
+
};
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Constructs a no op call for the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method
|
|
255
|
+
*
|
|
256
|
+
* @param params Parameters for the call
|
|
257
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
258
|
+
*/
|
|
259
|
+
static getMbrAmountsAndProtocolConstraints(params) {
|
|
260
|
+
return {
|
|
261
|
+
...params,
|
|
262
|
+
method: 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))',
|
|
263
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId],
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Constructs a no op call for the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method
|
|
268
|
+
*
|
|
269
|
+
* @param params Parameters for the call
|
|
270
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
271
|
+
*/
|
|
272
|
+
static getValidatorConfig(params) {
|
|
273
|
+
return {
|
|
274
|
+
...params,
|
|
275
|
+
method: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
|
|
276
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Constructs a no op call for the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method
|
|
281
|
+
*
|
|
282
|
+
* @param params Parameters for the call
|
|
283
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
284
|
+
*/
|
|
285
|
+
static getValidatorStates(params) {
|
|
286
|
+
return {
|
|
287
|
+
...params,
|
|
288
|
+
method: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
|
|
289
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Constructs a no op call for the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method
|
|
294
|
+
*
|
|
295
|
+
* @param params Parameters for the call
|
|
296
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
297
|
+
*/
|
|
298
|
+
static getPools(params) {
|
|
299
|
+
return {
|
|
300
|
+
...params,
|
|
301
|
+
method: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
|
|
302
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Constructs a no op call for the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method
|
|
307
|
+
*
|
|
308
|
+
* @param params Parameters for the call
|
|
309
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
310
|
+
*/
|
|
311
|
+
static getNodePoolAssignments(params) {
|
|
312
|
+
return {
|
|
313
|
+
...params,
|
|
314
|
+
method: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
|
|
315
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Constructs a no op call for the getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method
|
|
320
|
+
*
|
|
321
|
+
* @param params Parameters for the call
|
|
322
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
323
|
+
*/
|
|
324
|
+
static getValidators(params) {
|
|
325
|
+
return {
|
|
326
|
+
...params,
|
|
327
|
+
method: 'getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))',
|
|
328
|
+
args: Array.isArray(params.args) ? params.args : [params.args.registryAppId, params.args.validatorIds],
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Constructs a no op call for the getBlockTimestamps(uint64)uint64 ABI method
|
|
333
|
+
*
|
|
334
|
+
* @param params Parameters for the call
|
|
335
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
336
|
+
*/
|
|
337
|
+
static getBlockTimestamps(params) {
|
|
338
|
+
return {
|
|
339
|
+
...params,
|
|
340
|
+
method: 'getBlockTimestamps(uint64)uint64',
|
|
341
|
+
args: Array.isArray(params.args) ? params.args : [params.args.num],
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Constructs a no op call for the getAlgodVersion(uint64[])string ABI method
|
|
346
|
+
*
|
|
347
|
+
* @param params Parameters for the call
|
|
348
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
349
|
+
*/
|
|
350
|
+
static getAlgodVersion(params) {
|
|
351
|
+
return {
|
|
352
|
+
...params,
|
|
353
|
+
method: 'getAlgodVersion(uint64[])string',
|
|
354
|
+
args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Constructs a no op call for the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method
|
|
359
|
+
*
|
|
360
|
+
* @param params Parameters for the call
|
|
361
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
362
|
+
*/
|
|
363
|
+
static getAssets(params) {
|
|
364
|
+
return {
|
|
365
|
+
...params,
|
|
366
|
+
method: 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)',
|
|
367
|
+
args: Array.isArray(params.args) ? params.args : [params.args.assetIds],
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Constructs a no op call for the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method
|
|
372
|
+
*
|
|
373
|
+
* @param params Parameters for the call
|
|
374
|
+
* @returns An `AppClientMethodCallParams` object for the call
|
|
375
|
+
*/
|
|
376
|
+
static getPoolBalancesAndLastPayouts(params) {
|
|
377
|
+
return {
|
|
378
|
+
...params,
|
|
379
|
+
method: 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)',
|
|
380
|
+
args: Array.isArray(params.args) ? params.args : [params.args.poolAppIds],
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* A factory to create and deploy one or more instance of the RetiReader smart contract and to create one or more app clients to interact with those (or other) app instances
|
|
386
|
+
*/
|
|
387
|
+
class RetiReaderFactory {
|
|
388
|
+
/**
|
|
389
|
+
* The underlying `AppFactory` for when you want to have more flexibility
|
|
390
|
+
*/
|
|
391
|
+
appFactory;
|
|
392
|
+
/**
|
|
393
|
+
* Creates a new instance of `RetiReaderFactory`
|
|
394
|
+
*
|
|
395
|
+
* @param params The parameters to initialise the app factory with
|
|
396
|
+
*/
|
|
397
|
+
constructor(params) {
|
|
398
|
+
this.appFactory = new _AppFactory({
|
|
399
|
+
...params,
|
|
400
|
+
appSpec: APP_SPEC,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
/** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
|
|
404
|
+
get appName() {
|
|
405
|
+
return this.appFactory.appName;
|
|
406
|
+
}
|
|
407
|
+
/** The ARC-56 app spec being used */
|
|
408
|
+
get appSpec() {
|
|
409
|
+
return APP_SPEC;
|
|
410
|
+
}
|
|
411
|
+
/** A reference to the underlying `AlgorandClient` this app factory is using. */
|
|
412
|
+
get algorand() {
|
|
413
|
+
return this.appFactory.algorand;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Returns a new `AppClient` client for an app instance of the given ID.
|
|
417
|
+
*
|
|
418
|
+
* Automatically populates appName, defaultSender and source maps from the factory
|
|
419
|
+
* if not specified in the params.
|
|
420
|
+
* @param params The parameters to create the app client
|
|
421
|
+
* @returns The `AppClient`
|
|
422
|
+
*/
|
|
423
|
+
getAppClientById(params) {
|
|
424
|
+
return new RetiReaderClient(this.appFactory.getAppClientById(params));
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Returns a new `AppClient` client, resolving the app by creator address and name
|
|
428
|
+
* using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
|
|
429
|
+
*
|
|
430
|
+
* Automatically populates appName, defaultSender and source maps from the factory
|
|
431
|
+
* if not specified in the params.
|
|
432
|
+
* @param params The parameters to create the app client
|
|
433
|
+
* @returns The `AppClient`
|
|
434
|
+
*/
|
|
435
|
+
async getAppClientByCreatorAndName(params) {
|
|
436
|
+
return new RetiReaderClient(await this.appFactory.getAppClientByCreatorAndName(params));
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Idempotently deploys the RetiReader smart contract.
|
|
440
|
+
*
|
|
441
|
+
* @param params The arguments for the contract calls and any additional parameters for the call
|
|
442
|
+
* @returns The deployment result
|
|
443
|
+
*/
|
|
444
|
+
async deploy(params = {}) {
|
|
445
|
+
const result = await this.appFactory.deploy({
|
|
446
|
+
...params,
|
|
447
|
+
createParams: params.createParams?.method ? RetiReaderParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams : undefined,
|
|
448
|
+
});
|
|
449
|
+
return { result: result.result, appClient: new RetiReaderClient(result.appClient) };
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
|
|
453
|
+
*/
|
|
454
|
+
params = {
|
|
455
|
+
/**
|
|
456
|
+
* Gets available create methods
|
|
457
|
+
*/
|
|
458
|
+
create: {
|
|
459
|
+
/**
|
|
460
|
+
* Creates a new instance of the RetiReader smart contract using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method.
|
|
461
|
+
*
|
|
462
|
+
* @param params The params for the smart contract call
|
|
463
|
+
* @returns The create params
|
|
464
|
+
*/
|
|
465
|
+
getMbrAmountsAndProtocolConstraints: (params) => {
|
|
466
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params));
|
|
467
|
+
},
|
|
468
|
+
/**
|
|
469
|
+
* Creates a new instance of the RetiReader smart contract using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method.
|
|
470
|
+
*
|
|
471
|
+
* @param params The params for the smart contract call
|
|
472
|
+
* @returns The create params
|
|
473
|
+
*/
|
|
474
|
+
getValidatorConfig: (params) => {
|
|
475
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
|
|
476
|
+
},
|
|
477
|
+
/**
|
|
478
|
+
* Creates a new instance of the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
|
|
479
|
+
*
|
|
480
|
+
* @param params The params for the smart contract call
|
|
481
|
+
* @returns The create params
|
|
482
|
+
*/
|
|
483
|
+
getValidatorStates: (params) => {
|
|
484
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidatorStates(params));
|
|
485
|
+
},
|
|
486
|
+
/**
|
|
487
|
+
* Creates a new instance of the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
|
|
488
|
+
*
|
|
489
|
+
* @param params The params for the smart contract call
|
|
490
|
+
* @returns The create params
|
|
491
|
+
*/
|
|
492
|
+
getPools: (params) => {
|
|
493
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getPools(params));
|
|
494
|
+
},
|
|
495
|
+
/**
|
|
496
|
+
* Creates a new instance of the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
|
|
497
|
+
*
|
|
498
|
+
* @param params The params for the smart contract call
|
|
499
|
+
* @returns The create params
|
|
500
|
+
*/
|
|
501
|
+
getNodePoolAssignments: (params) => {
|
|
502
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
|
|
503
|
+
},
|
|
504
|
+
/**
|
|
505
|
+
* Creates a new instance of the RetiReader smart contract using the getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method.
|
|
506
|
+
*
|
|
507
|
+
* @param params The params for the smart contract call
|
|
508
|
+
* @returns The create params
|
|
509
|
+
*/
|
|
510
|
+
getValidators: (params) => {
|
|
511
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getValidators(params));
|
|
512
|
+
},
|
|
513
|
+
/**
|
|
514
|
+
* Creates a new instance of the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method.
|
|
515
|
+
*
|
|
516
|
+
* @param params The params for the smart contract call
|
|
517
|
+
* @returns The create params
|
|
518
|
+
*/
|
|
519
|
+
getBlockTimestamps: (params) => {
|
|
520
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
|
|
521
|
+
},
|
|
522
|
+
/**
|
|
523
|
+
* Creates a new instance of the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method.
|
|
524
|
+
*
|
|
525
|
+
* @param params The params for the smart contract call
|
|
526
|
+
* @returns The create params
|
|
527
|
+
*/
|
|
528
|
+
getAlgodVersion: (params) => {
|
|
529
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
|
|
530
|
+
},
|
|
531
|
+
/**
|
|
532
|
+
* Creates a new instance of the RetiReader smart contract using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method.
|
|
533
|
+
*
|
|
534
|
+
* @param params The params for the smart contract call
|
|
535
|
+
* @returns The create params
|
|
536
|
+
*/
|
|
537
|
+
getAssets: (params) => {
|
|
538
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getAssets(params));
|
|
539
|
+
},
|
|
540
|
+
/**
|
|
541
|
+
* Creates a new instance of the RetiReader smart contract using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method.
|
|
542
|
+
*
|
|
543
|
+
* @param params The params for the smart contract call
|
|
544
|
+
* @returns The create params
|
|
545
|
+
*/
|
|
546
|
+
getPoolBalancesAndLastPayouts: (params) => {
|
|
547
|
+
return this.appFactory.params.create(RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params));
|
|
548
|
+
},
|
|
549
|
+
},
|
|
550
|
+
/**
|
|
551
|
+
* Gets available deployUpdate methods
|
|
552
|
+
*/
|
|
553
|
+
deployUpdate: {
|
|
554
|
+
/**
|
|
555
|
+
* Updates an existing instance of the RetiReader smart contract using a bare call.
|
|
556
|
+
*
|
|
557
|
+
* @param params The params for the bare (raw) call
|
|
558
|
+
* @returns The params for a deployUpdate call
|
|
559
|
+
*/
|
|
560
|
+
bare: (params) => {
|
|
561
|
+
return this.appFactory.params.bare.deployUpdate(params);
|
|
562
|
+
},
|
|
563
|
+
},
|
|
564
|
+
/**
|
|
565
|
+
* Gets available deployDelete methods
|
|
566
|
+
*/
|
|
567
|
+
deployDelete: {
|
|
568
|
+
/**
|
|
569
|
+
* Deletes an existing instance of the RetiReader smart contract using a bare call.
|
|
570
|
+
*
|
|
571
|
+
* @param params The params for the bare (raw) call
|
|
572
|
+
* @returns The params for a deployDelete call
|
|
573
|
+
*/
|
|
574
|
+
bare: (params) => {
|
|
575
|
+
return this.appFactory.params.bare.deployDelete(params);
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
};
|
|
579
|
+
/**
|
|
580
|
+
* Create transactions for the current app
|
|
581
|
+
*/
|
|
582
|
+
createTransaction = {
|
|
583
|
+
/**
|
|
584
|
+
* Gets available create methods
|
|
585
|
+
*/
|
|
586
|
+
create: {
|
|
587
|
+
/**
|
|
588
|
+
* Creates a new instance of the RetiReader smart contract using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method.
|
|
589
|
+
*
|
|
590
|
+
* @param params The params for the smart contract call
|
|
591
|
+
* @returns The create transaction
|
|
592
|
+
*/
|
|
593
|
+
getMbrAmountsAndProtocolConstraints: (params) => {
|
|
594
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params));
|
|
595
|
+
},
|
|
596
|
+
/**
|
|
597
|
+
* Creates a new instance of the RetiReader smart contract using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method.
|
|
598
|
+
*
|
|
599
|
+
* @param params The params for the smart contract call
|
|
600
|
+
* @returns The create transaction
|
|
601
|
+
*/
|
|
602
|
+
getValidatorConfig: (params) => {
|
|
603
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
|
|
604
|
+
},
|
|
605
|
+
/**
|
|
606
|
+
* Creates a new instance of the RetiReader smart contract using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
|
|
607
|
+
*
|
|
608
|
+
* @param params The params for the smart contract call
|
|
609
|
+
* @returns The create transaction
|
|
610
|
+
*/
|
|
611
|
+
getValidatorStates: (params) => {
|
|
612
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidatorStates(params));
|
|
613
|
+
},
|
|
614
|
+
/**
|
|
615
|
+
* Creates a new instance of the RetiReader smart contract using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
|
|
616
|
+
*
|
|
617
|
+
* @param params The params for the smart contract call
|
|
618
|
+
* @returns The create transaction
|
|
619
|
+
*/
|
|
620
|
+
getPools: (params) => {
|
|
621
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getPools(params));
|
|
622
|
+
},
|
|
623
|
+
/**
|
|
624
|
+
* Creates a new instance of the RetiReader smart contract using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
|
|
625
|
+
*
|
|
626
|
+
* @param params The params for the smart contract call
|
|
627
|
+
* @returns The create transaction
|
|
628
|
+
*/
|
|
629
|
+
getNodePoolAssignments: (params) => {
|
|
630
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
|
|
631
|
+
},
|
|
632
|
+
/**
|
|
633
|
+
* Creates a new instance of the RetiReader smart contract using the getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method.
|
|
634
|
+
*
|
|
635
|
+
* @param params The params for the smart contract call
|
|
636
|
+
* @returns The create transaction
|
|
637
|
+
*/
|
|
638
|
+
getValidators: (params) => {
|
|
639
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getValidators(params));
|
|
640
|
+
},
|
|
641
|
+
/**
|
|
642
|
+
* Creates a new instance of the RetiReader smart contract using the getBlockTimestamps(uint64)uint64 ABI method.
|
|
643
|
+
*
|
|
644
|
+
* @param params The params for the smart contract call
|
|
645
|
+
* @returns The create transaction
|
|
646
|
+
*/
|
|
647
|
+
getBlockTimestamps: (params) => {
|
|
648
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
|
|
649
|
+
},
|
|
650
|
+
/**
|
|
651
|
+
* Creates a new instance of the RetiReader smart contract using the getAlgodVersion(uint64[])string ABI method.
|
|
652
|
+
*
|
|
653
|
+
* @param params The params for the smart contract call
|
|
654
|
+
* @returns The create transaction
|
|
655
|
+
*/
|
|
656
|
+
getAlgodVersion: (params) => {
|
|
657
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
|
|
658
|
+
},
|
|
659
|
+
/**
|
|
660
|
+
* Creates a new instance of the RetiReader smart contract using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method.
|
|
661
|
+
*
|
|
662
|
+
* @param params The params for the smart contract call
|
|
663
|
+
* @returns The create transaction
|
|
664
|
+
*/
|
|
665
|
+
getAssets: (params) => {
|
|
666
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getAssets(params));
|
|
667
|
+
},
|
|
668
|
+
/**
|
|
669
|
+
* Creates a new instance of the RetiReader smart contract using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method.
|
|
670
|
+
*
|
|
671
|
+
* @param params The params for the smart contract call
|
|
672
|
+
* @returns The create transaction
|
|
673
|
+
*/
|
|
674
|
+
getPoolBalancesAndLastPayouts: (params) => {
|
|
675
|
+
return this.appFactory.createTransaction.create(RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params));
|
|
676
|
+
},
|
|
677
|
+
},
|
|
678
|
+
};
|
|
679
|
+
/**
|
|
680
|
+
* Send calls to the current app
|
|
681
|
+
*/
|
|
682
|
+
send = {
|
|
683
|
+
/**
|
|
684
|
+
* Gets available create methods
|
|
685
|
+
*/
|
|
686
|
+
create: {
|
|
687
|
+
/**
|
|
688
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) ABI method.
|
|
689
|
+
*
|
|
690
|
+
* @param params The params for the smart contract call
|
|
691
|
+
* @returns The create result
|
|
692
|
+
*/
|
|
693
|
+
getMbrAmountsAndProtocolConstraints: async (params) => {
|
|
694
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getMbrAmountsAndProtocolConstraints(params));
|
|
695
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
696
|
+
},
|
|
697
|
+
/**
|
|
698
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) ABI method.
|
|
699
|
+
*
|
|
700
|
+
* @param params The params for the smart contract call
|
|
701
|
+
* @returns The create result
|
|
702
|
+
*/
|
|
703
|
+
getValidatorConfig: async (params) => {
|
|
704
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidatorConfig(params));
|
|
705
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
706
|
+
},
|
|
707
|
+
/**
|
|
708
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) ABI method.
|
|
709
|
+
*
|
|
710
|
+
* @param params The params for the smart contract call
|
|
711
|
+
* @returns The create result
|
|
712
|
+
*/
|
|
713
|
+
getValidatorStates: async (params) => {
|
|
714
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidatorStates(params));
|
|
715
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
716
|
+
},
|
|
717
|
+
/**
|
|
718
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) ABI method.
|
|
719
|
+
*
|
|
720
|
+
* @param params The params for the smart contract call
|
|
721
|
+
* @returns The create result
|
|
722
|
+
*/
|
|
723
|
+
getPools: async (params) => {
|
|
724
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getPools(params));
|
|
725
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
726
|
+
},
|
|
727
|
+
/**
|
|
728
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) ABI method.
|
|
729
|
+
*
|
|
730
|
+
* @param params The params for the smart contract call
|
|
731
|
+
* @returns The create result
|
|
732
|
+
*/
|
|
733
|
+
getNodePoolAssignments: async (params) => {
|
|
734
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getNodePoolAssignments(params));
|
|
735
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
736
|
+
},
|
|
737
|
+
/**
|
|
738
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) ABI method.
|
|
739
|
+
*
|
|
740
|
+
* @param params The params for the smart contract call
|
|
741
|
+
* @returns The create result
|
|
742
|
+
*/
|
|
743
|
+
getValidators: async (params) => {
|
|
744
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getValidators(params));
|
|
745
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
746
|
+
},
|
|
747
|
+
/**
|
|
748
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getBlockTimestamps(uint64)uint64 ABI method.
|
|
749
|
+
*
|
|
750
|
+
* @param params The params for the smart contract call
|
|
751
|
+
* @returns The create result
|
|
752
|
+
*/
|
|
753
|
+
getBlockTimestamps: async (params) => {
|
|
754
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getBlockTimestamps(params));
|
|
755
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
756
|
+
},
|
|
757
|
+
/**
|
|
758
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getAlgodVersion(uint64[])string ABI method.
|
|
759
|
+
*
|
|
760
|
+
* @param params The params for the smart contract call
|
|
761
|
+
* @returns The create result
|
|
762
|
+
*/
|
|
763
|
+
getAlgodVersion: async (params) => {
|
|
764
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getAlgodVersion(params));
|
|
765
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
766
|
+
},
|
|
767
|
+
/**
|
|
768
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getAssets(uint64[])(uint64,address,uint64,uint8,string,string) ABI method.
|
|
769
|
+
*
|
|
770
|
+
* @param params The params for the smart contract call
|
|
771
|
+
* @returns The create result
|
|
772
|
+
*/
|
|
773
|
+
getAssets: async (params) => {
|
|
774
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getAssets(params));
|
|
775
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
776
|
+
},
|
|
777
|
+
/**
|
|
778
|
+
* Creates a new instance of the RetiReader smart contract using an ABI method call using the getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) ABI method.
|
|
779
|
+
*
|
|
780
|
+
* @param params The params for the smart contract call
|
|
781
|
+
* @returns The create result
|
|
782
|
+
*/
|
|
783
|
+
getPoolBalancesAndLastPayouts: async (params) => {
|
|
784
|
+
const result = await this.appFactory.send.create(RetiReaderParamsFactory.create.getPoolBalancesAndLastPayouts(params));
|
|
785
|
+
return { result: { ...result.result, return: result.result.return }, appClient: new RetiReaderClient(result.appClient) };
|
|
786
|
+
},
|
|
787
|
+
},
|
|
788
|
+
};
|
|
789
|
+
}
|
|
790
|
+
/**
|
|
791
|
+
* A client to make calls to the RetiReader smart contract
|
|
792
|
+
*/
|
|
793
|
+
class RetiReaderClient {
|
|
794
|
+
/**
|
|
795
|
+
* The underlying `AppClient` for when you want to have more flexibility
|
|
796
|
+
*/
|
|
797
|
+
appClient;
|
|
798
|
+
constructor(appClientOrParams) {
|
|
799
|
+
this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({
|
|
800
|
+
...appClientOrParams,
|
|
801
|
+
appSpec: APP_SPEC,
|
|
802
|
+
});
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* Checks for decode errors on the given return value and maps the return value to the return type for the given method
|
|
806
|
+
* @returns The typed return value or undefined if there was no value
|
|
807
|
+
*/
|
|
808
|
+
decodeReturnValue(method, returnValue) {
|
|
809
|
+
return returnValue !== undefined ? getArc56ReturnValue(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined;
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Returns a new `RetiReaderClient` client, resolving the app by creator address and name
|
|
813
|
+
* using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
|
|
814
|
+
* @param params The parameters to create the app client
|
|
815
|
+
*/
|
|
816
|
+
static async fromCreatorAndName(params) {
|
|
817
|
+
return new RetiReaderClient(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));
|
|
818
|
+
}
|
|
819
|
+
/**
|
|
820
|
+
* Returns an `RetiReaderClient` instance for the current network based on
|
|
821
|
+
* pre-determined network-specific app IDs specified in the ARC-56 app spec.
|
|
822
|
+
*
|
|
823
|
+
* If no IDs are in the app spec or the network isn't recognised, an error is thrown.
|
|
824
|
+
* @param params The parameters to create the app client
|
|
825
|
+
*/
|
|
826
|
+
static async fromNetwork(params) {
|
|
827
|
+
return new RetiReaderClient(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));
|
|
828
|
+
}
|
|
829
|
+
/** The ID of the app instance this client is linked to. */
|
|
830
|
+
get appId() {
|
|
831
|
+
return this.appClient.appId;
|
|
832
|
+
}
|
|
833
|
+
/** The app address of the app instance this client is linked to. */
|
|
834
|
+
get appAddress() {
|
|
835
|
+
return this.appClient.appAddress;
|
|
836
|
+
}
|
|
837
|
+
/** The name of the app. */
|
|
838
|
+
get appName() {
|
|
839
|
+
return this.appClient.appName;
|
|
840
|
+
}
|
|
841
|
+
/** The ARC-56 app spec being used */
|
|
842
|
+
get appSpec() {
|
|
843
|
+
return this.appClient.appSpec;
|
|
844
|
+
}
|
|
845
|
+
/** A reference to the underlying `AlgorandClient` this app client is using. */
|
|
846
|
+
get algorand() {
|
|
847
|
+
return this.appClient.algorand;
|
|
848
|
+
}
|
|
849
|
+
/**
|
|
850
|
+
* Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
|
|
851
|
+
*/
|
|
852
|
+
params = {
|
|
853
|
+
/**
|
|
854
|
+
* Gets available update methods
|
|
855
|
+
*/
|
|
856
|
+
update: {
|
|
857
|
+
/**
|
|
858
|
+
* Updates an existing instance of the RetiReader smart contract using a bare call.
|
|
859
|
+
*
|
|
860
|
+
* @param params The params for the bare (raw) call
|
|
861
|
+
* @returns The update result
|
|
862
|
+
*/
|
|
863
|
+
bare: (params) => {
|
|
864
|
+
return this.appClient.params.bare.update(params);
|
|
865
|
+
},
|
|
866
|
+
},
|
|
867
|
+
/**
|
|
868
|
+
* Gets available delete methods
|
|
869
|
+
*/
|
|
870
|
+
delete: {
|
|
871
|
+
/**
|
|
872
|
+
* Deletes an existing instance of the RetiReader smart contract using a bare call.
|
|
873
|
+
*
|
|
874
|
+
* @param params The params for the bare (raw) call
|
|
875
|
+
* @returns The delete result
|
|
876
|
+
*/
|
|
877
|
+
bare: (params) => {
|
|
878
|
+
return this.appClient.params.bare.delete(params);
|
|
879
|
+
},
|
|
880
|
+
},
|
|
881
|
+
/**
|
|
882
|
+
* Makes a clear_state call to an existing instance of the RetiReader smart contract.
|
|
883
|
+
*
|
|
884
|
+
* @param params The params for the bare (raw) call
|
|
885
|
+
* @returns The clearState result
|
|
886
|
+
*/
|
|
887
|
+
clearState: (params) => {
|
|
888
|
+
return this.appClient.params.bare.clearState(params);
|
|
889
|
+
},
|
|
890
|
+
/**
|
|
891
|
+
* Makes a call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
|
|
892
|
+
*
|
|
893
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
894
|
+
*
|
|
895
|
+
* @param params The params for the smart contract call
|
|
896
|
+
* @returns The call params
|
|
897
|
+
*/
|
|
898
|
+
getMbrAmountsAndProtocolConstraints: (params) => {
|
|
899
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
|
|
900
|
+
},
|
|
901
|
+
/**
|
|
902
|
+
* Makes a call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
|
|
903
|
+
*
|
|
904
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
905
|
+
*
|
|
906
|
+
* @param params The params for the smart contract call
|
|
907
|
+
* @returns The call params
|
|
908
|
+
*/
|
|
909
|
+
getValidatorConfig: (params) => {
|
|
910
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getValidatorConfig(params));
|
|
911
|
+
},
|
|
912
|
+
/**
|
|
913
|
+
* Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
|
|
914
|
+
*
|
|
915
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
916
|
+
*
|
|
917
|
+
* @param params The params for the smart contract call
|
|
918
|
+
* @returns The call params
|
|
919
|
+
*/
|
|
920
|
+
getValidatorStates: (params) => {
|
|
921
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getValidatorStates(params));
|
|
922
|
+
},
|
|
923
|
+
/**
|
|
924
|
+
* Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
|
|
925
|
+
*
|
|
926
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
927
|
+
*
|
|
928
|
+
* @param params The params for the smart contract call
|
|
929
|
+
* @returns The call params
|
|
930
|
+
*/
|
|
931
|
+
getPools: (params) => {
|
|
932
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getPools(params));
|
|
933
|
+
},
|
|
934
|
+
/**
|
|
935
|
+
* Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
|
|
936
|
+
*
|
|
937
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
938
|
+
*
|
|
939
|
+
* @param params The params for the smart contract call
|
|
940
|
+
* @returns The call params
|
|
941
|
+
*/
|
|
942
|
+
getNodePoolAssignments: (params) => {
|
|
943
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
|
|
944
|
+
},
|
|
945
|
+
/**
|
|
946
|
+
* Makes a call to the RetiReader smart contract using the `getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
|
|
947
|
+
*
|
|
948
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
949
|
+
*
|
|
950
|
+
* @param params The params for the smart contract call
|
|
951
|
+
* @returns The call params
|
|
952
|
+
*/
|
|
953
|
+
getValidators: (params) => {
|
|
954
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getValidators(params));
|
|
955
|
+
},
|
|
956
|
+
/**
|
|
957
|
+
* Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
|
|
958
|
+
*
|
|
959
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
960
|
+
*
|
|
961
|
+
* @param params The params for the smart contract call
|
|
962
|
+
* @returns The call params
|
|
963
|
+
*/
|
|
964
|
+
getBlockTimestamps: (params) => {
|
|
965
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getBlockTimestamps(params));
|
|
966
|
+
},
|
|
967
|
+
/**
|
|
968
|
+
* Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
|
|
969
|
+
*
|
|
970
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
971
|
+
*
|
|
972
|
+
* @param params The params for the smart contract call
|
|
973
|
+
* @returns The call params
|
|
974
|
+
*/
|
|
975
|
+
getAlgodVersion: (params) => {
|
|
976
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getAlgodVersion(params));
|
|
977
|
+
},
|
|
978
|
+
/**
|
|
979
|
+
* Makes a call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
|
|
980
|
+
*
|
|
981
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
982
|
+
*
|
|
983
|
+
* @param params The params for the smart contract call
|
|
984
|
+
* @returns The call params
|
|
985
|
+
*/
|
|
986
|
+
getAssets: (params) => {
|
|
987
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getAssets(params));
|
|
988
|
+
},
|
|
989
|
+
/**
|
|
990
|
+
* Makes a call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
|
|
991
|
+
*
|
|
992
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
993
|
+
*
|
|
994
|
+
* @param params The params for the smart contract call
|
|
995
|
+
* @returns The call params
|
|
996
|
+
*/
|
|
997
|
+
getPoolBalancesAndLastPayouts: (params) => {
|
|
998
|
+
return this.appClient.params.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
|
|
999
|
+
},
|
|
1000
|
+
};
|
|
1001
|
+
/**
|
|
1002
|
+
* Create transactions for the current app
|
|
1003
|
+
*/
|
|
1004
|
+
createTransaction = {
|
|
1005
|
+
/**
|
|
1006
|
+
* Gets available update methods
|
|
1007
|
+
*/
|
|
1008
|
+
update: {
|
|
1009
|
+
/**
|
|
1010
|
+
* Updates an existing instance of the RetiReader smart contract using a bare call.
|
|
1011
|
+
*
|
|
1012
|
+
* @param params The params for the bare (raw) call
|
|
1013
|
+
* @returns The update result
|
|
1014
|
+
*/
|
|
1015
|
+
bare: (params) => {
|
|
1016
|
+
return this.appClient.createTransaction.bare.update(params);
|
|
1017
|
+
},
|
|
1018
|
+
},
|
|
1019
|
+
/**
|
|
1020
|
+
* Gets available delete methods
|
|
1021
|
+
*/
|
|
1022
|
+
delete: {
|
|
1023
|
+
/**
|
|
1024
|
+
* Deletes an existing instance of the RetiReader smart contract using a bare call.
|
|
1025
|
+
*
|
|
1026
|
+
* @param params The params for the bare (raw) call
|
|
1027
|
+
* @returns The delete result
|
|
1028
|
+
*/
|
|
1029
|
+
bare: (params) => {
|
|
1030
|
+
return this.appClient.createTransaction.bare.delete(params);
|
|
1031
|
+
},
|
|
1032
|
+
},
|
|
1033
|
+
/**
|
|
1034
|
+
* Makes a clear_state call to an existing instance of the RetiReader smart contract.
|
|
1035
|
+
*
|
|
1036
|
+
* @param params The params for the bare (raw) call
|
|
1037
|
+
* @returns The clearState result
|
|
1038
|
+
*/
|
|
1039
|
+
clearState: (params) => {
|
|
1040
|
+
return this.appClient.createTransaction.bare.clearState(params);
|
|
1041
|
+
},
|
|
1042
|
+
/**
|
|
1043
|
+
* Makes a call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
|
|
1044
|
+
*
|
|
1045
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1046
|
+
*
|
|
1047
|
+
* @param params The params for the smart contract call
|
|
1048
|
+
* @returns The call transaction
|
|
1049
|
+
*/
|
|
1050
|
+
getMbrAmountsAndProtocolConstraints: (params) => {
|
|
1051
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
|
|
1052
|
+
},
|
|
1053
|
+
/**
|
|
1054
|
+
* Makes a call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
|
|
1055
|
+
*
|
|
1056
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1057
|
+
*
|
|
1058
|
+
* @param params The params for the smart contract call
|
|
1059
|
+
* @returns The call transaction
|
|
1060
|
+
*/
|
|
1061
|
+
getValidatorConfig: (params) => {
|
|
1062
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidatorConfig(params));
|
|
1063
|
+
},
|
|
1064
|
+
/**
|
|
1065
|
+
* Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
|
|
1066
|
+
*
|
|
1067
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1068
|
+
*
|
|
1069
|
+
* @param params The params for the smart contract call
|
|
1070
|
+
* @returns The call transaction
|
|
1071
|
+
*/
|
|
1072
|
+
getValidatorStates: (params) => {
|
|
1073
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidatorStates(params));
|
|
1074
|
+
},
|
|
1075
|
+
/**
|
|
1076
|
+
* Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
|
|
1077
|
+
*
|
|
1078
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1079
|
+
*
|
|
1080
|
+
* @param params The params for the smart contract call
|
|
1081
|
+
* @returns The call transaction
|
|
1082
|
+
*/
|
|
1083
|
+
getPools: (params) => {
|
|
1084
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getPools(params));
|
|
1085
|
+
},
|
|
1086
|
+
/**
|
|
1087
|
+
* Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
|
|
1088
|
+
*
|
|
1089
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1090
|
+
*
|
|
1091
|
+
* @param params The params for the smart contract call
|
|
1092
|
+
* @returns The call transaction
|
|
1093
|
+
*/
|
|
1094
|
+
getNodePoolAssignments: (params) => {
|
|
1095
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
|
|
1096
|
+
},
|
|
1097
|
+
/**
|
|
1098
|
+
* Makes a call to the RetiReader smart contract using the `getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
|
|
1099
|
+
*
|
|
1100
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1101
|
+
*
|
|
1102
|
+
* @param params The params for the smart contract call
|
|
1103
|
+
* @returns The call transaction
|
|
1104
|
+
*/
|
|
1105
|
+
getValidators: (params) => {
|
|
1106
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getValidators(params));
|
|
1107
|
+
},
|
|
1108
|
+
/**
|
|
1109
|
+
* Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
|
|
1110
|
+
*
|
|
1111
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1112
|
+
*
|
|
1113
|
+
* @param params The params for the smart contract call
|
|
1114
|
+
* @returns The call transaction
|
|
1115
|
+
*/
|
|
1116
|
+
getBlockTimestamps: (params) => {
|
|
1117
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getBlockTimestamps(params));
|
|
1118
|
+
},
|
|
1119
|
+
/**
|
|
1120
|
+
* Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
|
|
1121
|
+
*
|
|
1122
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1123
|
+
*
|
|
1124
|
+
* @param params The params for the smart contract call
|
|
1125
|
+
* @returns The call transaction
|
|
1126
|
+
*/
|
|
1127
|
+
getAlgodVersion: (params) => {
|
|
1128
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getAlgodVersion(params));
|
|
1129
|
+
},
|
|
1130
|
+
/**
|
|
1131
|
+
* Makes a call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
|
|
1132
|
+
*
|
|
1133
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1134
|
+
*
|
|
1135
|
+
* @param params The params for the smart contract call
|
|
1136
|
+
* @returns The call transaction
|
|
1137
|
+
*/
|
|
1138
|
+
getAssets: (params) => {
|
|
1139
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getAssets(params));
|
|
1140
|
+
},
|
|
1141
|
+
/**
|
|
1142
|
+
* Makes a call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
|
|
1143
|
+
*
|
|
1144
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1145
|
+
*
|
|
1146
|
+
* @param params The params for the smart contract call
|
|
1147
|
+
* @returns The call transaction
|
|
1148
|
+
*/
|
|
1149
|
+
getPoolBalancesAndLastPayouts: (params) => {
|
|
1150
|
+
return this.appClient.createTransaction.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
|
|
1151
|
+
},
|
|
1152
|
+
};
|
|
1153
|
+
/**
|
|
1154
|
+
* Send calls to the current app
|
|
1155
|
+
*/
|
|
1156
|
+
send = {
|
|
1157
|
+
/**
|
|
1158
|
+
* Gets available update methods
|
|
1159
|
+
*/
|
|
1160
|
+
update: {
|
|
1161
|
+
/**
|
|
1162
|
+
* Updates an existing instance of the RetiReader smart contract using a bare call.
|
|
1163
|
+
*
|
|
1164
|
+
* @param params The params for the bare (raw) call
|
|
1165
|
+
* @returns The update result
|
|
1166
|
+
*/
|
|
1167
|
+
bare: (params) => {
|
|
1168
|
+
return this.appClient.send.bare.update(params);
|
|
1169
|
+
},
|
|
1170
|
+
},
|
|
1171
|
+
/**
|
|
1172
|
+
* Gets available delete methods
|
|
1173
|
+
*/
|
|
1174
|
+
delete: {
|
|
1175
|
+
/**
|
|
1176
|
+
* Deletes an existing instance of the RetiReader smart contract using a bare call.
|
|
1177
|
+
*
|
|
1178
|
+
* @param params The params for the bare (raw) call
|
|
1179
|
+
* @returns The delete result
|
|
1180
|
+
*/
|
|
1181
|
+
bare: (params) => {
|
|
1182
|
+
return this.appClient.send.bare.delete(params);
|
|
1183
|
+
},
|
|
1184
|
+
},
|
|
1185
|
+
/**
|
|
1186
|
+
* Makes a clear_state call to an existing instance of the RetiReader smart contract.
|
|
1187
|
+
*
|
|
1188
|
+
* @param params The params for the bare (raw) call
|
|
1189
|
+
* @returns The clearState result
|
|
1190
|
+
*/
|
|
1191
|
+
clearState: (params) => {
|
|
1192
|
+
return this.appClient.send.bare.clearState(params);
|
|
1193
|
+
},
|
|
1194
|
+
/**
|
|
1195
|
+
* Makes a call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
|
|
1196
|
+
*
|
|
1197
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1198
|
+
*
|
|
1199
|
+
* @param params The params for the smart contract call
|
|
1200
|
+
* @returns The call result
|
|
1201
|
+
*/
|
|
1202
|
+
getMbrAmountsAndProtocolConstraints: async (params) => {
|
|
1203
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
|
|
1204
|
+
return { ...result, return: result.return };
|
|
1205
|
+
},
|
|
1206
|
+
/**
|
|
1207
|
+
* Makes a call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
|
|
1208
|
+
*
|
|
1209
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1210
|
+
*
|
|
1211
|
+
* @param params The params for the smart contract call
|
|
1212
|
+
* @returns The call result
|
|
1213
|
+
*/
|
|
1214
|
+
getValidatorConfig: async (params) => {
|
|
1215
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorConfig(params));
|
|
1216
|
+
return { ...result, return: result.return };
|
|
1217
|
+
},
|
|
1218
|
+
/**
|
|
1219
|
+
* Makes a call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
|
|
1220
|
+
*
|
|
1221
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1222
|
+
*
|
|
1223
|
+
* @param params The params for the smart contract call
|
|
1224
|
+
* @returns The call result
|
|
1225
|
+
*/
|
|
1226
|
+
getValidatorStates: async (params) => {
|
|
1227
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorStates(params));
|
|
1228
|
+
return { ...result, return: result.return };
|
|
1229
|
+
},
|
|
1230
|
+
/**
|
|
1231
|
+
* Makes a call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
|
|
1232
|
+
*
|
|
1233
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1234
|
+
*
|
|
1235
|
+
* @param params The params for the smart contract call
|
|
1236
|
+
* @returns The call result
|
|
1237
|
+
*/
|
|
1238
|
+
getPools: async (params) => {
|
|
1239
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getPools(params));
|
|
1240
|
+
return { ...result, return: result.return };
|
|
1241
|
+
},
|
|
1242
|
+
/**
|
|
1243
|
+
* Makes a call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
|
|
1244
|
+
*
|
|
1245
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1246
|
+
*
|
|
1247
|
+
* @param params The params for the smart contract call
|
|
1248
|
+
* @returns The call result
|
|
1249
|
+
*/
|
|
1250
|
+
getNodePoolAssignments: async (params) => {
|
|
1251
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
|
|
1252
|
+
return { ...result, return: result.return };
|
|
1253
|
+
},
|
|
1254
|
+
/**
|
|
1255
|
+
* Makes a call to the RetiReader smart contract using the `getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
|
|
1256
|
+
*
|
|
1257
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1258
|
+
*
|
|
1259
|
+
* @param params The params for the smart contract call
|
|
1260
|
+
* @returns The call result
|
|
1261
|
+
*/
|
|
1262
|
+
getValidators: async (params) => {
|
|
1263
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidators(params));
|
|
1264
|
+
return { ...result, return: result.return };
|
|
1265
|
+
},
|
|
1266
|
+
/**
|
|
1267
|
+
* Makes a call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
|
|
1268
|
+
*
|
|
1269
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1270
|
+
*
|
|
1271
|
+
* @param params The params for the smart contract call
|
|
1272
|
+
* @returns The call result
|
|
1273
|
+
*/
|
|
1274
|
+
getBlockTimestamps: async (params) => {
|
|
1275
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getBlockTimestamps(params));
|
|
1276
|
+
return { ...result, return: result.return };
|
|
1277
|
+
},
|
|
1278
|
+
/**
|
|
1279
|
+
* Makes a call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
|
|
1280
|
+
*
|
|
1281
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1282
|
+
*
|
|
1283
|
+
* @param params The params for the smart contract call
|
|
1284
|
+
* @returns The call result
|
|
1285
|
+
*/
|
|
1286
|
+
getAlgodVersion: async (params) => {
|
|
1287
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getAlgodVersion(params));
|
|
1288
|
+
return { ...result, return: result.return };
|
|
1289
|
+
},
|
|
1290
|
+
/**
|
|
1291
|
+
* Makes a call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
|
|
1292
|
+
*
|
|
1293
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1294
|
+
*
|
|
1295
|
+
* @param params The params for the smart contract call
|
|
1296
|
+
* @returns The call result
|
|
1297
|
+
*/
|
|
1298
|
+
getAssets: async (params) => {
|
|
1299
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getAssets(params));
|
|
1300
|
+
return { ...result, return: result.return };
|
|
1301
|
+
},
|
|
1302
|
+
/**
|
|
1303
|
+
* Makes a call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
|
|
1304
|
+
*
|
|
1305
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1306
|
+
*
|
|
1307
|
+
* @param params The params for the smart contract call
|
|
1308
|
+
* @returns The call result
|
|
1309
|
+
*/
|
|
1310
|
+
getPoolBalancesAndLastPayouts: async (params) => {
|
|
1311
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
|
|
1312
|
+
return { ...result, return: result.return };
|
|
1313
|
+
},
|
|
1314
|
+
};
|
|
1315
|
+
/**
|
|
1316
|
+
* Clone this app client with different params
|
|
1317
|
+
*
|
|
1318
|
+
* @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.
|
|
1319
|
+
* @returns A new app client with the altered params
|
|
1320
|
+
*/
|
|
1321
|
+
clone(params) {
|
|
1322
|
+
return new RetiReaderClient(this.appClient.clone(params));
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))` ABI method.
|
|
1326
|
+
*
|
|
1327
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1328
|
+
*
|
|
1329
|
+
* @param params The params for the smart contract call
|
|
1330
|
+
* @returns The call result
|
|
1331
|
+
*/
|
|
1332
|
+
async getMbrAmountsAndProtocolConstraints(params) {
|
|
1333
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getMbrAmountsAndProtocolConstraints(params));
|
|
1334
|
+
return result.return;
|
|
1335
|
+
}
|
|
1336
|
+
/**
|
|
1337
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)` ABI method.
|
|
1338
|
+
*
|
|
1339
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1340
|
+
*
|
|
1341
|
+
* @param params The params for the smart contract call
|
|
1342
|
+
* @returns The call result
|
|
1343
|
+
*/
|
|
1344
|
+
async getValidatorConfig(params) {
|
|
1345
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorConfig(params));
|
|
1346
|
+
return result.return;
|
|
1347
|
+
}
|
|
1348
|
+
/**
|
|
1349
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)` ABI method.
|
|
1350
|
+
*
|
|
1351
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1352
|
+
*
|
|
1353
|
+
* @param params The params for the smart contract call
|
|
1354
|
+
* @returns The call result
|
|
1355
|
+
*/
|
|
1356
|
+
async getValidatorStates(params) {
|
|
1357
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidatorStates(params));
|
|
1358
|
+
return result.return;
|
|
1359
|
+
}
|
|
1360
|
+
/**
|
|
1361
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))` ABI method.
|
|
1362
|
+
*
|
|
1363
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1364
|
+
*
|
|
1365
|
+
* @param params The params for the smart contract call
|
|
1366
|
+
* @returns The call result
|
|
1367
|
+
*/
|
|
1368
|
+
async getPools(params) {
|
|
1369
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getPools(params));
|
|
1370
|
+
return result.return;
|
|
1371
|
+
}
|
|
1372
|
+
/**
|
|
1373
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])` ABI method.
|
|
1374
|
+
*
|
|
1375
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1376
|
+
*
|
|
1377
|
+
* @param params The params for the smart contract call
|
|
1378
|
+
* @returns The call result
|
|
1379
|
+
*/
|
|
1380
|
+
async getNodePoolAssignments(params) {
|
|
1381
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getNodePoolAssignments(params));
|
|
1382
|
+
return result.return;
|
|
1383
|
+
}
|
|
1384
|
+
/**
|
|
1385
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))` ABI method.
|
|
1386
|
+
*
|
|
1387
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1388
|
+
*
|
|
1389
|
+
* @param params The params for the smart contract call
|
|
1390
|
+
* @returns The call result
|
|
1391
|
+
*/
|
|
1392
|
+
async getValidators(params) {
|
|
1393
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getValidators(params));
|
|
1394
|
+
return result.return;
|
|
1395
|
+
}
|
|
1396
|
+
/**
|
|
1397
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getBlockTimestamps(uint64)uint64` ABI method.
|
|
1398
|
+
*
|
|
1399
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1400
|
+
*
|
|
1401
|
+
* @param params The params for the smart contract call
|
|
1402
|
+
* @returns The call result
|
|
1403
|
+
*/
|
|
1404
|
+
async getBlockTimestamps(params) {
|
|
1405
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getBlockTimestamps(params));
|
|
1406
|
+
return result.return;
|
|
1407
|
+
}
|
|
1408
|
+
/**
|
|
1409
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getAlgodVersion(uint64[])string` ABI method.
|
|
1410
|
+
*
|
|
1411
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1412
|
+
*
|
|
1413
|
+
* @param params The params for the smart contract call
|
|
1414
|
+
* @returns The call result
|
|
1415
|
+
*/
|
|
1416
|
+
async getAlgodVersion(params) {
|
|
1417
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getAlgodVersion(params));
|
|
1418
|
+
return result.return;
|
|
1419
|
+
}
|
|
1420
|
+
/**
|
|
1421
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getAssets(uint64[])(uint64,address,uint64,uint8,string,string)` ABI method.
|
|
1422
|
+
*
|
|
1423
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1424
|
+
*
|
|
1425
|
+
* @param params The params for the smart contract call
|
|
1426
|
+
* @returns The call result
|
|
1427
|
+
*/
|
|
1428
|
+
async getAssets(params) {
|
|
1429
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getAssets(params));
|
|
1430
|
+
return result.return;
|
|
1431
|
+
}
|
|
1432
|
+
/**
|
|
1433
|
+
* Makes a readonly (simulated) call to the RetiReader smart contract using the `getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)` ABI method.
|
|
1434
|
+
*
|
|
1435
|
+
* This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
|
|
1436
|
+
*
|
|
1437
|
+
* @param params The params for the smart contract call
|
|
1438
|
+
* @returns The call result
|
|
1439
|
+
*/
|
|
1440
|
+
async getPoolBalancesAndLastPayouts(params) {
|
|
1441
|
+
const result = await this.appClient.send.call(RetiReaderParamsFactory.getPoolBalancesAndLastPayouts(params));
|
|
1442
|
+
return result.return;
|
|
1443
|
+
}
|
|
1444
|
+
/**
|
|
1445
|
+
* Methods to access state for the current RetiReader app
|
|
1446
|
+
*/
|
|
1447
|
+
state = {};
|
|
1448
|
+
newGroup() {
|
|
1449
|
+
const client = this;
|
|
1450
|
+
const composer = this.algorand.newGroup();
|
|
1451
|
+
let promiseChain = Promise.resolve();
|
|
1452
|
+
const resultMappers = [];
|
|
1453
|
+
return {
|
|
1454
|
+
/**
|
|
1455
|
+
* Add a getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)) method call against the RetiReader contract
|
|
1456
|
+
*/
|
|
1457
|
+
getMbrAmountsAndProtocolConstraints(params) {
|
|
1458
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getMbrAmountsAndProtocolConstraints(params)));
|
|
1459
|
+
resultMappers.push((v) => client.decodeReturnValue('getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))', v));
|
|
1460
|
+
return this;
|
|
1461
|
+
},
|
|
1462
|
+
/**
|
|
1463
|
+
* Add a getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) method call against the RetiReader contract
|
|
1464
|
+
*/
|
|
1465
|
+
getValidatorConfig(params) {
|
|
1466
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidatorConfig(params)));
|
|
1467
|
+
resultMappers.push((v) => client.decodeReturnValue('getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)', v));
|
|
1468
|
+
return this;
|
|
1469
|
+
},
|
|
1470
|
+
/**
|
|
1471
|
+
* Add a getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64) method call against the RetiReader contract
|
|
1472
|
+
*/
|
|
1473
|
+
getValidatorStates(params) {
|
|
1474
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidatorStates(params)));
|
|
1475
|
+
resultMappers.push((v) => client.decodeReturnValue('getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)', v));
|
|
1476
|
+
return this;
|
|
1477
|
+
},
|
|
1478
|
+
/**
|
|
1479
|
+
* Add a getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64)) method call against the RetiReader contract
|
|
1480
|
+
*/
|
|
1481
|
+
getPools(params) {
|
|
1482
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getPools(params)));
|
|
1483
|
+
resultMappers.push((v) => client.decodeReturnValue('getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))', v));
|
|
1484
|
+
return this;
|
|
1485
|
+
},
|
|
1486
|
+
/**
|
|
1487
|
+
* Add a getNodePoolAssignments(uint64,uint64[])((uint64[3])[8]) method call against the RetiReader contract
|
|
1488
|
+
*/
|
|
1489
|
+
getNodePoolAssignments(params) {
|
|
1490
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getNodePoolAssignments(params)));
|
|
1491
|
+
resultMappers.push((v) => client.decodeReturnValue('getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])', v));
|
|
1492
|
+
return this;
|
|
1493
|
+
},
|
|
1494
|
+
/**
|
|
1495
|
+
* Add a getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8])) method call against the RetiReader contract
|
|
1496
|
+
*/
|
|
1497
|
+
getValidators(params) {
|
|
1498
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getValidators(params)));
|
|
1499
|
+
resultMappers.push((v) => client.decodeReturnValue('getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))', v));
|
|
1500
|
+
return this;
|
|
1501
|
+
},
|
|
1502
|
+
/**
|
|
1503
|
+
* Add a getBlockTimestamps(uint64)uint64 method call against the RetiReader contract
|
|
1504
|
+
*/
|
|
1505
|
+
getBlockTimestamps(params) {
|
|
1506
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBlockTimestamps(params)));
|
|
1507
|
+
resultMappers.push((v) => client.decodeReturnValue('getBlockTimestamps(uint64)uint64', v));
|
|
1508
|
+
return this;
|
|
1509
|
+
},
|
|
1510
|
+
/**
|
|
1511
|
+
* Add a getAlgodVersion(uint64[])string method call against the RetiReader contract
|
|
1512
|
+
*/
|
|
1513
|
+
getAlgodVersion(params) {
|
|
1514
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAlgodVersion(params)));
|
|
1515
|
+
resultMappers.push((v) => client.decodeReturnValue('getAlgodVersion(uint64[])string', v));
|
|
1516
|
+
return this;
|
|
1517
|
+
},
|
|
1518
|
+
/**
|
|
1519
|
+
* Add a getAssets(uint64[])(uint64,address,uint64,uint8,string,string) method call against the RetiReader contract
|
|
1520
|
+
*/
|
|
1521
|
+
getAssets(params) {
|
|
1522
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssets(params)));
|
|
1523
|
+
resultMappers.push((v) => client.decodeReturnValue('getAssets(uint64[])(uint64,address,uint64,uint8,string,string)', v));
|
|
1524
|
+
return this;
|
|
1525
|
+
},
|
|
1526
|
+
/**
|
|
1527
|
+
* Add a getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64) method call against the RetiReader contract
|
|
1528
|
+
*/
|
|
1529
|
+
getPoolBalancesAndLastPayouts(params) {
|
|
1530
|
+
promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getPoolBalancesAndLastPayouts(params)));
|
|
1531
|
+
resultMappers.push((v) => client.decodeReturnValue('getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)', v));
|
|
1532
|
+
return this;
|
|
1533
|
+
},
|
|
1534
|
+
get update() {
|
|
1535
|
+
return {
|
|
1536
|
+
bare: (params) => {
|
|
1537
|
+
promiseChain = promiseChain.then(async () => composer.addAppUpdate(await client.params.update.bare(params)));
|
|
1538
|
+
return this;
|
|
1539
|
+
},
|
|
1540
|
+
};
|
|
1541
|
+
},
|
|
1542
|
+
get delete() {
|
|
1543
|
+
return {
|
|
1544
|
+
bare: (params) => {
|
|
1545
|
+
promiseChain = promiseChain.then(() => composer.addAppDelete(client.params.delete.bare(params)));
|
|
1546
|
+
return this;
|
|
1547
|
+
},
|
|
1548
|
+
};
|
|
1549
|
+
},
|
|
1550
|
+
/**
|
|
1551
|
+
* Add a clear state call to the RetiReader contract
|
|
1552
|
+
*/
|
|
1553
|
+
clearState(params) {
|
|
1554
|
+
promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));
|
|
1555
|
+
return this;
|
|
1556
|
+
},
|
|
1557
|
+
addTransaction(txn, signer) {
|
|
1558
|
+
promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));
|
|
1559
|
+
return this;
|
|
1560
|
+
},
|
|
1561
|
+
async composer() {
|
|
1562
|
+
await promiseChain;
|
|
1563
|
+
return composer;
|
|
1564
|
+
},
|
|
1565
|
+
async simulate(options) {
|
|
1566
|
+
await promiseChain;
|
|
1567
|
+
const result = await (!options ? composer.simulate() : composer.simulate(options));
|
|
1568
|
+
return {
|
|
1569
|
+
...result,
|
|
1570
|
+
returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i](val) : val.returnValue)
|
|
1571
|
+
};
|
|
1572
|
+
},
|
|
1573
|
+
async send(params) {
|
|
1574
|
+
await promiseChain;
|
|
1575
|
+
const result = await composer.send(params);
|
|
1576
|
+
return {
|
|
1577
|
+
...result,
|
|
1578
|
+
returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i](val) : val.returnValue)
|
|
1579
|
+
};
|
|
1580
|
+
}
|
|
1581
|
+
};
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
/* BEGIN GHOST SDK CODE */
|
|
1585
|
+
import { getABIDecodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56';
|
|
1586
|
+
import { makeEmptyTransactionSigner } from 'algosdk';
|
|
1587
|
+
const emptySigner = makeEmptyTransactionSigner();
|
|
1588
|
+
class GhostBase {
|
|
1589
|
+
static factory = RetiReaderFactory;
|
|
1590
|
+
static client = RetiReaderClient;
|
|
1591
|
+
algorand;
|
|
1592
|
+
readerAccount = 'A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE'; // non-mainnet fee sink
|
|
1593
|
+
ghostAppId;
|
|
1594
|
+
factory;
|
|
1595
|
+
client;
|
|
1596
|
+
cacheParamsTimeout = 75; // ms
|
|
1597
|
+
constructor({ algorand, readerAccount, ghostAppId, }) {
|
|
1598
|
+
this.algorand = algorand;
|
|
1599
|
+
if (readerAccount)
|
|
1600
|
+
this.readerAccount = readerAccount;
|
|
1601
|
+
this.factory = this.algorand.client.getTypedAppFactory(RetiReaderFactory, {
|
|
1602
|
+
defaultSender: this.readerAccount,
|
|
1603
|
+
});
|
|
1604
|
+
this.ghostAppId = ghostAppId;
|
|
1605
|
+
this.client = this.factory.getAppClientById({ appId: ghostAppId ?? 13n });
|
|
1606
|
+
}
|
|
1607
|
+
async getAndCacheSuggestedParams() {
|
|
1608
|
+
const suggestedParams = await this.algorand.getSuggestedParams();
|
|
1609
|
+
if (this.cacheParamsTimeout) {
|
|
1610
|
+
this.algorand.setSuggestedParamsCache(suggestedParams, new Date(Date.now() + this.cacheParamsTimeout));
|
|
1611
|
+
}
|
|
1612
|
+
return suggestedParams;
|
|
1613
|
+
}
|
|
1614
|
+
async execute({ signature, txnBuilder, methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1615
|
+
await this.getAndCacheSuggestedParams();
|
|
1616
|
+
const methodName = signature.slice(0, signature.indexOf('('));
|
|
1617
|
+
let builder = this.client.newGroup();
|
|
1618
|
+
if (this.ghostAppId) {
|
|
1619
|
+
// deployed variant, we can call directly
|
|
1620
|
+
const argsArray = Array.isArray(methodArgsOrArgsArray) ? methodArgsOrArgsArray : [methodArgsOrArgsArray];
|
|
1621
|
+
for (let i = 0; i < argsArray.length; i++) {
|
|
1622
|
+
const args = argsArray[i];
|
|
1623
|
+
const extra = Array.isArray(extraMethodCallArgs) ? extraMethodCallArgs[i] : extraMethodCallArgs;
|
|
1624
|
+
builder = txnBuilder(builder, { args, signer: emptySigner, ...extra });
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
else {
|
|
1628
|
+
// ghost variant
|
|
1629
|
+
// Avoiding .createTransaction because it compiles on the fly (why?). build app args and convert to app create
|
|
1630
|
+
let throwawayBuilder = this.client.newGroup();
|
|
1631
|
+
const argsArray = Array.isArray(methodArgsOrArgsArray) ? methodArgsOrArgsArray : [methodArgsOrArgsArray];
|
|
1632
|
+
for (let i = 0; i < argsArray.length; i++) {
|
|
1633
|
+
const args = argsArray[i];
|
|
1634
|
+
const extra = Array.isArray(extraMethodCallArgs) ? extraMethodCallArgs[i] : extraMethodCallArgs;
|
|
1635
|
+
throwawayBuilder = txnBuilder(throwawayBuilder, { args, signer: emptySigner, ...extra });
|
|
1636
|
+
}
|
|
1637
|
+
const { transactions } = await (await throwawayBuilder.composer()).buildTransactions();
|
|
1638
|
+
// convert to app creates, copy to new real builder
|
|
1639
|
+
for (const txn of transactions) {
|
|
1640
|
+
// @ts-ignore
|
|
1641
|
+
txn.applicationCall = {
|
|
1642
|
+
...txn.applicationCall,
|
|
1643
|
+
appIndex: 0,
|
|
1644
|
+
approvalProgram: Buffer.from(APP_SPEC.byteCode.approval, 'base64'),
|
|
1645
|
+
clearProgram: Buffer.from(APP_SPEC.byteCode.clear, 'base64'),
|
|
1646
|
+
numGlobalByteSlices: APP_SPEC.state.schema.global.bytes,
|
|
1647
|
+
numGlobalInts: APP_SPEC.state.schema.global.ints,
|
|
1648
|
+
numLocalByteSlices: APP_SPEC.state.schema.local.bytes,
|
|
1649
|
+
numLocalInts: APP_SPEC.state.schema.local.ints,
|
|
1650
|
+
extraPages: 3,
|
|
1651
|
+
};
|
|
1652
|
+
builder = builder.addTransaction(txn, emptySigner);
|
|
1653
|
+
}
|
|
1654
|
+
}
|
|
1655
|
+
const { confirmations } = await builder.simulate({
|
|
1656
|
+
extraOpcodeBudget: 170000,
|
|
1657
|
+
allowMoreLogging: true,
|
|
1658
|
+
allowEmptySignatures: true,
|
|
1659
|
+
allowUnnamedResources: true,
|
|
1660
|
+
...extraSimulateArgs,
|
|
1661
|
+
});
|
|
1662
|
+
const logs = confirmations.flatMap(({ logs }, i) => {
|
|
1663
|
+
if (!logs)
|
|
1664
|
+
throw new Error(`logs were not returned from simulate txn ${i}. this should never happen`);
|
|
1665
|
+
return logs.slice(0, -1);
|
|
1666
|
+
});
|
|
1667
|
+
const specRetObj = this.client.appSpec.methods.find(({ name }) => name === methodName)?.returns;
|
|
1668
|
+
if (!specRetObj)
|
|
1669
|
+
throw new Error('Method not found in app spec');
|
|
1670
|
+
const retTypeStr = specRetObj.struct ?? specRetObj.type;
|
|
1671
|
+
const retData = [];
|
|
1672
|
+
for (let i = 0; i < logs.length; i++) {
|
|
1673
|
+
retData.push(getABIDecodedValue(new Uint8Array(logs[i]), retTypeStr, this.factory.appSpec.structs));
|
|
1674
|
+
}
|
|
1675
|
+
return retData;
|
|
1676
|
+
}
|
|
1677
|
+
}
|
|
1678
|
+
export class RetiReaderSDK extends GhostBase {
|
|
1679
|
+
constructor(args) {
|
|
1680
|
+
super(args);
|
|
1681
|
+
}
|
|
1682
|
+
async getMbrAmountsAndProtocolConstraints({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1683
|
+
return this.execute({
|
|
1684
|
+
signature: 'getMbrAmountsAndProtocolConstraints(uint64)((uint64,uint64,uint64,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))',
|
|
1685
|
+
txnBuilder: (builder, args) => builder.getMbrAmountsAndProtocolConstraints(args),
|
|
1686
|
+
methodArgsOrArgsArray,
|
|
1687
|
+
extraMethodCallArgs,
|
|
1688
|
+
extraSimulateArgs,
|
|
1689
|
+
});
|
|
1690
|
+
}
|
|
1691
|
+
async getValidatorConfig({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1692
|
+
return this.execute({
|
|
1693
|
+
signature: 'getValidatorConfig(uint64,uint64[])(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)',
|
|
1694
|
+
txnBuilder: (builder, args) => builder.getValidatorConfig(args),
|
|
1695
|
+
methodArgsOrArgsArray,
|
|
1696
|
+
extraMethodCallArgs,
|
|
1697
|
+
extraSimulateArgs,
|
|
1698
|
+
});
|
|
1699
|
+
}
|
|
1700
|
+
async getValidatorStates({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1701
|
+
return this.execute({
|
|
1702
|
+
signature: 'getValidatorStates(uint64,uint64[])(uint16,uint64,uint64,uint64)',
|
|
1703
|
+
txnBuilder: (builder, args) => builder.getValidatorStates(args),
|
|
1704
|
+
methodArgsOrArgsArray,
|
|
1705
|
+
extraMethodCallArgs,
|
|
1706
|
+
extraSimulateArgs,
|
|
1707
|
+
});
|
|
1708
|
+
}
|
|
1709
|
+
async getPools({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1710
|
+
return this.execute({
|
|
1711
|
+
signature: 'getPools(uint64,uint64[])(uint64,(uint64,uint16,uint64))',
|
|
1712
|
+
txnBuilder: (builder, args) => builder.getPools(args),
|
|
1713
|
+
methodArgsOrArgsArray,
|
|
1714
|
+
extraMethodCallArgs,
|
|
1715
|
+
extraSimulateArgs,
|
|
1716
|
+
});
|
|
1717
|
+
}
|
|
1718
|
+
async getNodePoolAssignments({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1719
|
+
return this.execute({
|
|
1720
|
+
signature: 'getNodePoolAssignments(uint64,uint64[])((uint64[3])[8])',
|
|
1721
|
+
txnBuilder: (builder, args) => builder.getNodePoolAssignments(args),
|
|
1722
|
+
methodArgsOrArgsArray,
|
|
1723
|
+
extraMethodCallArgs,
|
|
1724
|
+
extraSimulateArgs,
|
|
1725
|
+
});
|
|
1726
|
+
}
|
|
1727
|
+
async getValidators({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1728
|
+
return this.execute({
|
|
1729
|
+
signature: 'getValidators(uint64,uint64[])((uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64),(uint16,uint64,uint64,uint64),(uint64,uint16,uint64)[],((uint64[3])[8]))',
|
|
1730
|
+
txnBuilder: (builder, args) => builder.getValidators(args),
|
|
1731
|
+
methodArgsOrArgsArray,
|
|
1732
|
+
extraMethodCallArgs,
|
|
1733
|
+
extraSimulateArgs,
|
|
1734
|
+
});
|
|
1735
|
+
}
|
|
1736
|
+
async getBlockTimestamps({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1737
|
+
return this.execute({
|
|
1738
|
+
signature: 'getBlockTimestamps(uint64)uint64',
|
|
1739
|
+
txnBuilder: (builder, args) => builder.getBlockTimestamps(args),
|
|
1740
|
+
methodArgsOrArgsArray,
|
|
1741
|
+
extraMethodCallArgs,
|
|
1742
|
+
extraSimulateArgs,
|
|
1743
|
+
});
|
|
1744
|
+
}
|
|
1745
|
+
async getAlgodVersion({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1746
|
+
return this.execute({
|
|
1747
|
+
signature: 'getAlgodVersion(uint64[])string',
|
|
1748
|
+
txnBuilder: (builder, args) => builder.getAlgodVersion(args),
|
|
1749
|
+
methodArgsOrArgsArray,
|
|
1750
|
+
extraMethodCallArgs,
|
|
1751
|
+
extraSimulateArgs,
|
|
1752
|
+
});
|
|
1753
|
+
}
|
|
1754
|
+
async getAssets({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1755
|
+
return this.execute({
|
|
1756
|
+
signature: 'getAssets(uint64[])(uint64,address,uint64,uint8,string,string)',
|
|
1757
|
+
txnBuilder: (builder, args) => builder.getAssets(args),
|
|
1758
|
+
methodArgsOrArgsArray,
|
|
1759
|
+
extraMethodCallArgs,
|
|
1760
|
+
extraSimulateArgs,
|
|
1761
|
+
});
|
|
1762
|
+
}
|
|
1763
|
+
async getPoolBalancesAndLastPayouts({ methodArgsOrArgsArray, extraMethodCallArgs, extraSimulateArgs, }) {
|
|
1764
|
+
return this.execute({
|
|
1765
|
+
signature: 'getPoolBalancesAndLastPayouts(uint64[])(uint64,uint64)',
|
|
1766
|
+
txnBuilder: (builder, args) => builder.getPoolBalancesAndLastPayouts(args),
|
|
1767
|
+
methodArgsOrArgsArray,
|
|
1768
|
+
extraMethodCallArgs,
|
|
1769
|
+
extraSimulateArgs,
|
|
1770
|
+
});
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
/* END GHOST SDK CODE */
|