From ce38f0a8251b7bf0b00b8c12d77ce51e832bfaa4 Mon Sep 17 00:00:00 2001 From: Janez Podhostnik Date: Fri, 24 Jul 2026 16:59:41 +0200 Subject: [PATCH 1/2] Expose FlowFees fee receiver addresses via getter and change event Add FlowFees.getFeeReceiverAddresses() returning the FlowFees account plus all child fee accounts, and emit ChildFeeAccountsChanged whenever the child fee account list changes. Child fee accounts are now created inside the new Administrator.createChildFeeAccounts(count:payer:) function instead of being assembled in the transaction and written to storage directly, which guarantees they are keyless, fully owned by FlowFees, and valid fee deposit targets by construction. Closes #614 --- Makefile | 2 +- contracts/FlowFees.cdc | 73 +++++++- lib/go/contracts/internal/assets/assets.go | 6 +- lib/go/templates/internal/assets/assets.go | 29 +++- lib/go/templates/service_templates.go | 29 ++-- tests/flow_fees_test.cdc | 164 ++++++++++++++++++ tests/transactions/add_contract.cdc | 6 + tests/transactions/deduct_transaction_fee.cdc | 9 + .../add_fee_child_accounts.cdc | 25 ++- .../scripts/get_fee_receiver_addresses.cdc | 12 ++ 10 files changed, 319 insertions(+), 36 deletions(-) create mode 100644 tests/flow_fees_test.cdc create mode 100644 tests/transactions/add_contract.cdc create mode 100644 tests/transactions/deduct_transaction_fee.cdc create mode 100644 transactions/FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc diff --git a/Makefile b/Makefile index ebc37920a..17794e600 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: test test: generate $(MAKE) test -C lib/go - flow test --cover --covercode="contracts" tests/*.cdc + flow test --cover --covercode="contracts" --jobs 1 tests/*.cdc .PHONY: generate generate: diff --git a/contracts/FlowFees.cdc b/contracts/FlowFees.cdc index 515d401f9..968b6328d 100644 --- a/contracts/FlowFees.cdc +++ b/contracts/FlowFees.cdc @@ -16,6 +16,11 @@ access(all) contract FlowFees { // Event that is emitted when fee parameters change access(all) event FeeParametersChanged(surgeFactor: UFix64, inclusionEffortCost: UFix64, executionEffortCost: UFix64) + // Event that is emitted when the list of child fee accounts changes. + // Contains the full new list of child fee account addresses + // (the FlowFees account itself is not included) + access(all) event ChildFeeAccountsChanged(addresses: [Address]) + // Private vault with public deposit function access(self) var vault: @FlowToken.Vault @@ -28,7 +33,7 @@ access(all) contract FlowFees { /// Get the balance of the Fees Vault access(all) fun getFeeBalance(): UFix64 { - let childFeeAccounts = self.account.storage.borrow<&[Capability]>(from: /storage/ChildFeeAccounts) + let childFeeAccounts = self.borrowChildFeeAccounts() // fallback in case no child accounts were created yet if childFeeAccounts == nil || childFeeAccounts!.length == 0 { @@ -47,6 +52,34 @@ access(all) contract FlowFees { return totalFees } + /// Borrows the list of child fee account capabilities from storage. + /// Returns nil if no child fee accounts were added yet. + access(self) view fun borrowChildFeeAccounts(): &[Capability]? { + return self.account.storage.borrow<&[Capability]>(from: /storage/ChildFeeAccounts) + } + + /// Returns the addresses of all accounts that may receive transaction + /// fee deposits, i.e. the possible `to` addresses of the deposit events + /// emitted when fees are collected: the FlowFees account plus any + /// child fee accounts. + /// Note that fees received by the FlowFees account itself are held in + /// the contract's internal vault, not in the account's default FLOW + /// vault, so they are not reflected in that account's balance. + /// Use getFeeBalance() to get the total balance of all collected fees. + access(all) view fun getFeeReceiverAddresses(): [Address] { + var addresses: [Address] = [self.account.address] + if let childFeeAccounts = self.borrowChildFeeAccounts() { + var i = 0 + while i < childFeeAccounts.length { + // concat is used because mutating functions + // like append cannot be called in view functions + addresses = addresses.concat([childFeeAccounts[i].address]) + i = i + 1 + } + } + return addresses + } + access(all) resource Administrator { // withdraw // @@ -62,7 +95,7 @@ access(all) contract FlowFees { remainingAmount = remainingAmount - withdrawAmount var vault <- FlowFees.vault.withdraw(amount: withdrawAmount) - let childFeeAccounts = FlowFees.account.storage.borrow<&[Capability]>(from: /storage/ChildFeeAccounts) + let childFeeAccounts = FlowFees.borrowChildFeeAccounts() // fallback in case no child accounts were created yet if childFeeAccounts == nil || childFeeAccounts!.length == 0 { @@ -121,6 +154,40 @@ access(all) contract FlowFees { let newParameters = FeeParameters(surgeFactor: surgeFactor, inclusionEffortCost: oldParameters.inclusionEffortCost, executionEffortCost: oldParameters.executionEffortCost) FlowFees.setFeeParameters(newParameters) } + + /// Creates the given number of new child fee accounts, paid for + /// by `payer`, and adds them to the list of accounts that may + /// receive transaction fee deposits. + /// The new accounts have no keys and are only accessible through + /// the account capabilities stored in the FlowFees account, + /// so they are fully controlled by the FlowFees contract. + access(all) fun createChildFeeAccounts(count: Int, payer: auth(BorrowValue | Storage) &Account) { + pre { + count > 0: + "FlowFees.createChildFeeAccounts: The number of child fee accounts to create must be positive" + } + + let childFeeAccounts = FlowFees.account.storage.load<[Capability]>(from: /storage/ChildFeeAccounts) ?? [] + + let childAddresses: [Address] = [] + for existingChildFeeAccount in childFeeAccounts { + childAddresses.append(existingChildFeeAccount.address) + } + + var i = 0 + while i < count { + i = i + 1 + let newAccount = Account(payer: payer) + let cap = newAccount.capabilities.account.issue() + + childFeeAccounts.append(cap) + childAddresses.append(cap.address) + } + + FlowFees.account.storage.save(childFeeAccounts, to: /storage/ChildFeeAccounts) + + emit ChildFeeAccountsChanged(addresses: childAddresses) + } } /// A struct holding the fee parameters needed to calculate the fees @@ -234,7 +301,7 @@ access(all) contract FlowFees { /// The supplied vault will go to one child fee account according to the current number of child fee accounts and the current transaction index. /// if there are no child accounts, the fees will be collected in the self.vault access(self) fun collectFeesOnChildAccounts(_ vault: @{FungibleToken.Vault}) { - let childFeeAccounts = self.account.storage.borrow<&[Capability]>(from: /storage/ChildFeeAccounts) + let childFeeAccounts = self.borrowChildFeeAccounts() // fallback in case no child accounts were created yet if childFeeAccounts == nil || childFeeAccounts!.length == 0 { diff --git a/lib/go/contracts/internal/assets/assets.go b/lib/go/contracts/internal/assets/assets.go index 6ad3e0b44..49e2a8a24 100644 --- a/lib/go/contracts/internal/assets/assets.go +++ b/lib/go/contracts/internal/assets/assets.go @@ -2,7 +2,7 @@ // sources: // Crypto.cdc (4.588kB) // FlowExecutionParameters.cdc (1.073kB) -// FlowFees.cdc (14.03kB) +// FlowFees.cdc (17.079kB) // FlowIDTableStaking.cdc (109.837kB) // FlowServiceAccount.cdc (8.339kB) // FlowStakingCollection.cdc (62.869kB) @@ -129,7 +129,7 @@ func flowexecutionparametersCdc() (*asset, error) { return a, nil } -var _flowfeesCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x5f\x8f\x1b\xb7\x11\x7f\xbf\x4f\x31\x36\x50\x77\x15\xcb\x3a\xf7\x0f\xfa\x70\xbd\x73\x62\x5f\x7c\x85\xd1\x16\x31\x1c\xdb\x79\x48\x03\x83\xda\x9d\x95\x08\xaf\x48\x95\xe4\x4a\x77\x49\xee\xbb\x17\xfc\xbb\x24\x97\xab\xd3\xd9\x0e\xd0\x02\xd5\x83\xcf\xda\x25\x87\x43\xce\xcc\x6f\x86\x33\x23\xba\xd9\x72\xa1\xe0\xe1\x55\xcf\x56\x74\xd9\xe1\x5b\xfe\x11\xd9\xc3\x93\xf0\xb8\xe3\xfb\xc2\xa3\xef\x15\x17\x64\x85\x57\x88\xf2\xe1\xc9\x09\xa9\x6b\x94\xb2\x22\x5d\x37\x83\x9a\x33\x25\x48\xad\x40\x0f\xd3\xef\xe1\x97\x93\x13\x00\x80\xd3\x53\x78\xb9\x43\xa6\x40\xad\x89\x02\x2a\x01\x37\x54\x29\x6c\x60\xbf\x46\x06\x4a\xaf\x21\x81\x08\x84\x06\xb7\x5c\x52\xfd\x46\x71\x50\x6b\x84\x16\x11\x76\xa4\xef\x94\xa1\x13\x2f\x86\x86\xa0\xe1\x4f\x7e\xeb\xa7\x55\x64\xc3\x7b\xa6\xce\xe0\xdd\x15\xbd\xfe\xcb\x9f\x67\xf7\x5c\x7e\x4f\xd5\xba\x11\x64\xcf\xa0\x15\x7c\x73\x0f\x06\x7e\xf0\x13\x3f\x85\x81\x56\x9f\x94\xdd\x7d\xd3\xd7\x0a\x9b\x89\xa5\xf4\x89\x7e\xeb\x86\x64\xeb\xcc\x81\xb2\xba\xeb\x25\xe5\xec\x65\xdb\x72\x11\xbd\xc0\x6b\xac\x7b\x35\x7a\x71\x2c\x67\xb0\x25\x82\x6c\x50\xa1\x90\x50\xaf\x09\x5b\xe1\x34\x77\xaf\xc3\xd0\x4b\x33\xb2\xa9\x64\x2f\x56\x78\x45\x6a\xc5\xc5\x24\xab\x97\x5c\x4e\xb3\x1b\xbf\x1c\x58\x7e\x2d\xe8\x8e\x28\x27\x18\x23\x35\xd8\xf6\xcb\x8e\xd6\x5e\x81\xa0\xed\x59\xad\xa9\xc4\xcc\x4a\xec\xda\x19\xec\x88\xb0\xf3\xce\xe0\x9b\xa0\xe1\x8b\xf7\x46\xc4\xa3\xad\xb5\x3d\xf3\x24\x2b\xad\x12\x67\xf0\xcd\x2f\x89\xb5\xd8\x89\xb7\x33\xf8\xc5\xcc\xd5\x9f\x0e\x95\x55\x9f\xf3\x27\xf6\x2f\x91\x0f\xc6\x4b\xc5\xa3\x97\xa4\x23\xac\x46\xb8\x30\xe3\x17\xee\x6b\x18\xa2\xf9\x5e\x18\x96\x17\x29\x2f\xe7\x4f\xf4\xdf\x59\x18\xa8\x65\x37\x69\x11\x8e\xaa\x1d\x7d\xeb\x8f\xf2\x14\xfe\x86\xca\x28\xba\x67\x82\xb7\xe6\xab\x31\xdf\xf7\x45\xc5\xd7\x87\xb2\x42\x75\x85\xf8\xc2\xce\xa9\x66\x5e\x44\xd9\x31\xd4\x6b\xda\x35\x57\x88\xcf\xeb\x5a\x33\x21\xe1\xc2\x6e\x86\xd8\xef\x0b\x69\xa1\x64\xb1\xe4\x42\xf0\xfd\xf9\xa3\x1f\x2f\xc9\x96\x2c\x69\x47\xd5\xcd\x39\xe9\xd5\xba\x72\x58\x33\x87\x4b\x07\x2d\x72\x0e\x7f\xc7\x1b\x39\x87\x57\x6c\xc9\xaf\xe7\x10\x26\x50\x94\x33\x78\xe4\x16\x7a\xf6\xd3\x33\x77\x44\xa7\x6e\x89\xd3\xcb\x8c\x15\xa7\x4c\x4e\xa1\x5a\xd2\x75\x4b\x52\x7f\x04\xca\xa0\x26\x12\x81\x71\xcb\x3c\x10\xcf\xfa\x1e\x05\x42\x2d\x90\x68\xeb\xb8\xc1\x41\x82\xb4\x2d\xec\xf3\x02\x18\xed\xe0\xd7\x5f\x47\xaf\x1e\x2c\x3a\x64\x2b\xb5\xd6\x43\x9e\x46\xc7\xa5\x3f\x02\x55\x2f\x58\x2c\xef\x5c\x15\x6e\x07\xae\xb5\x1e\x2b\xae\x48\x67\x24\x75\x01\x4f\x17\x4f\xc3\xbb\xf8\xf9\xf0\xff\xc7\x25\xca\x61\x4e\xcb\x85\xb6\x77\xc7\xe7\x1b\x6c\xcd\x59\xe4\xdc\xa7\x1c\xd3\xd6\x6a\x7b\x18\xa0\x55\x38\xa6\xe1\x24\x5b\xcd\xb2\x9d\x1e\x62\x72\x20\xb0\x20\x3b\x42\x3b\xb2\xec\xbc\xa2\xc5\x34\x6e\x4b\x87\xe2\x4e\x30\x90\x8b\x95\x3d\x56\x61\x81\x92\xf7\xa2\x46\x78\xde\x6c\x28\xa3\x52\x09\xa2\xb8\x88\x98\x3c\x3d\x0d\xce\x20\x7a\x16\xbf\x7e\xde\x75\x7c\x2f\x8d\xad\x90\x84\x88\xe2\x61\xaa\xf7\x2d\x13\xde\xa4\x64\x58\x7e\xaa\x35\xe3\x2b\xc1\x37\x57\x88\xc6\x0e\x73\xd7\x32\x85\x45\xd9\x51\x6b\x3d\x11\xb8\x21\x94\x51\xb6\x7a\xbe\x71\x52\xb2\xb4\x46\x03\xfd\xea\x61\x5c\xac\x55\x4e\xe2\xde\xb9\xa7\x8a\x04\xe7\xa3\x55\xc6\x22\x1f\x91\x2f\xd3\x4a\xe6\xdd\x02\x76\x12\x8f\x21\x96\xad\x9f\x52\xc9\x0c\x2d\x3f\x8f\xfc\xc9\x93\x8c\xfc\xe8\xa4\xac\xeb\x39\x7f\x92\x6f\xc1\x4f\x0b\xd2\x4a\xe9\x44\xb0\x03\xd3\x20\x19\x68\xfe\x77\x01\x25\x7c\x3e\x58\xc2\x17\x05\x4c\x47\x2d\x17\xde\x33\xad\xb6\x85\xa1\xfa\xb3\x25\x8c\xd6\xd5\xc3\x4b\xc2\x18\x57\x91\xa1\xae\x11\x04\xfe\xbb\x47\xa9\x39\xb6\xb2\xd3\xae\x50\x1b\xac\x35\xe2\x05\xbc\xd5\xa6\x1e\xde\x5c\xfd\xe3\xbb\x1f\xf4\xdf\x7f\x39\x49\xcf\xa2\xf9\x31\x04\x50\x09\x2b\x73\x10\x42\xc7\x58\xcc\xac\x64\xf0\xc9\xc6\x7d\x94\xa5\xc0\x20\x17\x0f\x67\x23\xc6\x6f\x4b\xbb\x4e\xcd\xef\x81\xb7\xe9\xf2\xbe\x4f\x4f\xa1\x67\x02\x49\xbd\xd6\x70\x5a\x1a\xe1\x0e\xe6\x1d\xc3\xeb\x2d\xea\x10\xd3\x83\xa9\xd5\x74\xb7\xce\x83\x22\x77\xa3\x47\x51\x24\x32\x0e\x8d\xdd\x79\x8d\x26\xb9\xf5\xce\x9f\x64\x10\x59\x58\x43\x5b\xa0\x53\xb6\x57\xac\xc1\x6b\x8d\x54\x7f\x4d\x46\xec\xd7\xb4\xc3\x74\xcc\xf9\xb4\x6e\x3d\x7a\x74\xb4\x12\x95\x7c\xde\x88\xee\x8f\xf1\xc2\x3f\x1d\xf2\x82\x11\x49\x43\xc5\x60\xb8\xf6\xbe\xb1\x27\xcd\xed\xdf\x98\x7c\x8a\xfd\xfe\x98\x67\xf0\x28\x0b\x35\x47\x16\xde\xfa\xf7\xe6\xf5\x14\x53\xe0\xe0\x29\xf7\xc1\x29\x63\x23\x0f\x3d\x49\xeb\x28\xf7\x92\x9d\xca\x68\xed\x63\x9c\x4c\xa2\x05\xf9\x82\x87\x22\x8a\xe4\x33\xe9\x76\x0e\x92\x3f\xe4\x82\x12\xea\x93\x6f\x3e\xd3\x35\xc5\x9f\xf2\x95\x21\x55\xb3\x3b\xfd\xd5\xd8\x4c\xcb\xfc\x8f\x9f\x64\xf6\x99\x7c\x7d\x0c\x7f\x38\x64\xde\xf7\xc0\xf4\xff\x39\x3c\xbf\xcd\x77\x7a\x34\x8e\x1f\xc6\xf0\x4f\xc3\xef\xec\xe0\xef\x8d\xdb\x53\x98\x7d\x1b\x5f\xaf\x0e\x07\xcb\x36\xab\x00\xa4\xeb\xc2\xc9\x45\x39\x07\xa2\x80\xc7\x76\x9a\xc7\xcb\xd2\x5c\x44\x87\xcc\xc3\x17\x4e\x39\x64\x52\xd0\x80\xc8\x70\x3f\x2c\xa7\x83\xb5\xe9\xe5\xa3\x2f\x13\x3c\x14\x1e\x4e\x30\x54\x78\x98\x8a\x22\x04\x8d\xa3\x23\x49\x38\x9e\x7d\x86\x8c\xbc\x7c\xcc\xbe\xa0\x35\x1b\xbb\x43\x32\xdf\x0f\x47\x50\x7d\x80\x82\x70\x4a\x47\xcc\xbb\x26\x3d\x62\xbf\xb5\x55\xbe\xb5\xd9\x6f\x2b\x9e\x84\x91\xc5\xf1\xc2\x4a\xe7\xfd\x16\xa2\x83\x34\x8b\xf3\x1c\xa4\x12\x7d\xad\x60\xcd\xbb\x86\xb2\x55\xc9\x94\x18\x62\x63\xc1\xac\x26\x5d\xdd\x77\x44\x05\x89\xca\xd1\x0d\xd9\x91\x4b\xb8\x49\xee\xc7\xa7\x06\x3f\x63\x4d\xd0\xd0\xd8\x4b\xbb\xc2\x86\x7c\x44\x50\x82\x30\x49\x4c\x1e\xce\x82\xa3\x40\xb9\xe5\xcc\x0c\x58\xd3\xd5\x1a\x3a\x4e\x1a\x09\xdc\x42\x26\x43\xb5\xe7\xe2\x63\x51\x9f\x74\xf0\x50\xd0\x9d\x11\x3b\x06\xc4\x6b\x2e\x0d\xa2\x73\x86\xd0\x33\x6a\xfe\x1f\x44\x07\x68\x64\x60\xd1\xff\xea\xfd\x3f\x35\xd3\x96\x2d\xa9\x83\x29\x93\x06\x31\xbb\xd5\x87\x38\x9a\x35\xc9\xdc\x01\x80\x39\x9e\xc9\xa0\x27\xf7\x62\x72\x34\x6b\x92\xc9\x03\x40\x37\x40\x01\x65\x54\x7d\x61\x10\x4d\x0d\xdc\x24\xa1\xa2\x05\xe0\x22\x16\xed\x78\x68\x61\x59\xb8\x28\x31\x33\x9e\x5a\x60\x0a\x2e\x4a\xac\x4e\x19\x16\xbc\x47\x41\xdb\x9b\xd7\xe4\x06\x85\x8b\x18\xdf\xa0\xd4\xfe\xd4\x48\x44\xfb\x3e\x6c\x60\x79\x63\x14\x78\x37\x8c\x95\x6e\xf0\x15\x17\x6f\x07\x23\x78\x19\x24\x55\x4a\x4f\xc7\x66\x37\xb9\x6c\x92\xa1\x7a\x2b\x7a\xd4\x11\x84\x5e\x7c\xab\xc7\xc2\x9a\x48\x90\x7d\xdb\xd2\x9a\x22\x1b\x12\xcb\x5a\x5f\x4c\x9c\x12\x19\xe4\xa0\x36\x1a\x10\x38\x53\x94\xf5\x65\x37\x6b\xee\x26\xc4\x71\x8f\xd1\x7e\xce\xe0\x05\xe7\x5d\xc2\xd1\x1a\x41\xbb\x8e\x4d\xbf\x71\x1c\x79\x16\x74\x30\x45\x05\x36\xc7\xf3\xb2\x48\x09\x53\x09\x3b\xd2\xe9\x0d\x4b\x68\xb0\xa5\xee\xe0\x8f\x3f\xf4\xb2\x5d\xe8\xcd\x79\xde\xdc\xfc\x82\xe1\xda\x8d\x91\x6b\xb3\xb1\x11\xac\x55\x03\x4e\xb4\x36\x87\x39\x6c\x48\x3f\x98\x8d\x36\x5c\x13\xa6\x35\xb8\x17\xf1\x1a\x95\xbe\xf1\x74\xdd\x70\x47\x19\x99\xb6\x47\xd8\xd9\xe4\x56\x1c\x8f\xd1\xfe\xb5\x5f\x99\xb0\xf2\x03\x42\x9d\x4f\x1d\xca\x1c\xee\x58\xa3\x64\xed\xc5\x85\xf4\xbd\xb9\xf4\x7c\x3c\x3d\x63\xc5\xdc\x89\x92\x27\xe3\x29\x65\x1e\xe1\x62\x82\xf9\x3c\x26\x1a\x00\xe0\x1e\x46\x4d\xa5\x76\xac\xdd\x00\x08\x1a\xb9\x97\xd8\x72\x11\x24\xc9\x56\x40\x62\x45\x58\xf8\x65\x5e\x29\xbb\x12\x45\x69\x4b\x71\xb9\xc6\x18\x6b\xfa\xbd\x0c\xf6\x44\xa5\x75\xa1\xc8\x78\xbf\x5a\xc7\x76\x53\xb6\xac\xb9\x5f\x89\x30\x7f\x33\xb0\xb1\x9e\xd7\xea\x2d\x97\xd6\xb9\xe4\xea\x1d\x78\xac\xf4\x15\x4e\xd8\xe8\xc2\x56\x67\x73\xff\x68\x88\x7b\x82\x23\xe5\x75\x95\xa5\x88\xfe\xcc\xd3\x3e\x89\xcc\x2c\x97\x76\xb4\x63\x6f\xf7\xc4\xb1\xee\x90\xc6\x5d\x2d\xc3\xc8\xc7\x9e\xdc\xa7\x9b\xac\xbe\x77\x6c\xc8\xf5\x68\x13\x8e\xe3\x3c\xd6\x3d\x5e\x4b\xaa\xa0\x6a\x1f\xac\x4c\x9f\xd7\xb5\xbe\x5b\xf5\x6a\x5d\xbd\x30\xd9\x9d\xf7\x1a\xe5\x86\x14\xed\x3c\xb2\xd9\x72\x89\x37\x0c\xd8\x90\xeb\x97\xe5\x6a\xaf\x19\x32\x3b\x3b\xd2\xaf\xf8\x92\xa0\x3f\x3d\x17\xbb\x4d\x03\xf8\x22\xa9\x4a\x6d\xc8\x75\x6a\x5e\xbe\xec\x57\xf3\xcd\xb6\x57\xa6\x73\xa0\x1a\x6d\x26\x7b\x50\x28\x5c\x8f\xb7\x97\x16\xf1\x02\xdb\x4e\x2d\x02\xc7\xb9\xed\x1c\xdc\x81\x41\x51\x4b\xe1\xcd\x08\x77\xb2\xfe\x87\x45\x83\xad\xbe\xf6\x9a\x1b\xf3\x1b\x94\x28\x76\x61\x74\x15\xa4\xbb\x20\x4d\x23\x50\xc6\x99\x74\xda\x4e\xae\x71\xe1\x44\x56\x3d\xcd\x6f\x46\x1a\x26\xda\x90\xd9\x30\x3b\x8b\x6c\xe3\x67\x14\x1c\xf0\x9a\x2a\x40\x22\xba\x9b\x45\xe9\x9a\x3e\x25\xfe\x6a\x94\x56\x99\x70\x0d\x4a\xf4\x38\x2f\x24\x6e\x33\x57\x51\xde\xdb\x78\xe2\x94\x27\x19\x69\x50\x32\x73\xe2\x06\x3b\x55\xc9\x36\x72\x30\xd8\x61\x12\x21\x36\xdd\x12\xcf\x7b\x65\xef\x1f\xd8\xac\xd0\xd6\x33\xf6\x6b\x14\x18\x45\x55\x0d\x47\xc9\x14\xac\xc9\x0e\x81\x58\x02\x73\x50\x02\x49\xba\x1e\x91\xf0\x34\xb5\x84\xa1\xb0\x1f\x27\x3a\x5d\xba\x57\x85\x14\x2c\x5c\x0c\x50\x30\x2a\xf5\x7c\x5e\x36\x77\xe0\x60\x58\xee\x50\x55\xf9\x5e\x8a\xe2\x00\x3b\x0f\x6c\x96\xde\xdd\x61\x03\x54\xc5\x32\x88\xd4\x75\x94\x43\x1b\x59\xad\x1b\x9c\x2a\xf2\x84\x5e\x7a\xc2\xcf\x2e\x8e\xd2\xbd\x4f\x52\xd8\xa3\x95\x75\xd4\x62\x71\x69\xa3\x02\xd3\x52\x93\xb8\x7f\x7d\x10\xb2\x5f\xba\x96\x1b\xc5\x5d\x07\x90\xbf\x95\x07\x02\xa1\x7e\xfc\xbc\x57\x6b\x5f\x76\x30\x61\xc2\x30\x9b\x96\x1b\x35\x2c\xc5\x94\xc1\xea\x83\x1e\x76\xd8\xeb\xdc\xbf\xa1\x28\xd2\x3c\xad\xfb\x2d\x62\x48\x61\x7f\x09\xf4\xc7\x49\xe8\xa7\x6d\xbc\xd8\x11\xf8\x29\xd0\xb4\x5b\x31\x6e\x3d\x5b\x38\xf7\x39\x34\x1c\x18\x57\x21\x94\x9a\xe7\xf3\x25\x0f\xd1\xd9\x40\xa4\x67\x0c\xf5\xa1\x13\x41\xbb\x9b\xd0\x40\x65\xba\xa2\x64\x01\x85\x4b\x66\x37\xc2\x03\x52\x80\x82\x2f\x5a\xf5\x49\x18\xfb\xfa\x6b\x9f\x3e\x0e\x99\xa8\x92\xde\x9c\xc1\x3b\x66\xee\x25\x8a\x83\xe5\x09\x04\xb6\x28\x50\x9b\x9e\x0b\x09\x3d\xcc\x9a\xdd\x58\xac\x7c\x38\x3b\x99\x10\xd6\xb3\x02\x2a\x15\x84\xe6\x52\xea\xbd\xea\x0d\x2c\xeb\x38\x9b\x37\x1a\x54\xd4\x1a\xf6\xb4\xeb\x80\xe1\x4e\x5f\x35\xb5\x63\x24\xf5\x1a\x9b\x91\xdc\x88\xf4\x10\x64\xc4\xa7\x05\xd7\xb3\x06\x43\x11\x31\xa0\x8f\x67\xc2\x92\xe5\x0e\xf4\xd5\x1a\xa9\x88\x0d\x57\x5a\x85\x6d\xb4\xdd\x69\x9b\xae\x79\xd7\xe1\xf8\xf6\x12\x75\x8c\x38\x46\x2e\x7b\x21\x90\xa9\xee\xc6\xee\x83\x4a\xb3\x88\xcf\x9a\xb5\x84\x76\xa3\xc8\xbf\x22\x32\x74\xe7\x59\xe7\xef\x12\x41\xa6\xfc\xef\xbd\xdc\x54\x2c\xdc\xf1\x15\xad\x67\xa3\x03\x79\xd1\xab\x38\x5d\x27\xb4\xb4\xb1\xe4\x3d\x77\x4e\x9a\xda\x83\xcd\x7d\xb2\xc1\x3e\x5c\x13\x09\x1d\x4a\x19\x5d\x58\xfd\xe4\xa1\x32\x52\xbc\x4c\xf8\x4f\x8c\x11\xc7\xf9\x27\x57\x7a\x7d\xef\xbb\x2f\xa2\x59\xa3\x4a\x56\xa0\x1e\x61\x85\x43\x22\x23\x2d\xad\xe7\xdf\x31\xd3\xef\xe0\x0b\xb7\xd5\xf9\x93\x40\x3e\x0d\x2e\xdf\xba\x7c\xaa\x4f\x9d\x46\xce\x4e\x60\xcd\x99\x4d\xdc\x60\x03\xbd\xf4\xe9\xd7\x86\x28\xe2\xa1\x9b\x4a\xd7\x26\xa9\x6f\x48\xae\xbf\xee\x75\x52\xe5\x30\x67\xdf\xf1\xfa\xa3\xeb\x4a\xd5\x11\x89\x99\xb1\x26\xdb\x2d\x32\xd7\x15\x0a\xbe\x48\x53\x6c\x06\x0d\x3b\x2e\xc0\xf7\x27\x20\x2c\xa4\x6e\xcc\xe6\x7b\xb7\xdb\x8e\x62\x13\x5a\x2f\xbb\x0e\x56\x5c\xeb\x07\x67\xe8\xba\x40\xf4\x31\x79\x35\x1c\x5d\x19\x6b\x6b\x00\xc0\xfa\xcd\x12\x85\xd6\xb2\xd1\x24\x19\x0e\xc9\x0f\x4e\x5c\x26\x6b\xf0\x7a\x11\x98\xa2\x19\xa2\xa7\x8d\x28\xf3\x90\xe0\xb6\xac\x2e\xd1\x9b\xaa\xb5\x5c\xfd\x76\x68\x8a\x8b\x1d\xa8\x6d\x16\xd5\x1e\xf4\x80\xb6\x7c\x08\x9d\xa4\x47\x75\x85\xfe\xbf\x1d\xf2\x5e\xdd\x3d\x07\xfa\x5e\x77\x63\x1f\x76\x87\x73\xbd\xf6\x75\xe8\x15\xc6\x5e\xcd\x3c\x8d\xaa\x48\xa6\xe3\x21\x2d\x5c\xbf\x62\xaa\xf2\xd3\x7f\x07\xef\x5e\x31\xf5\xa7\x3f\x56\x53\xfb\x98\xa5\x71\xc9\x97\xea\x14\x71\xa4\x04\xd6\x48\xb5\xab\x4b\x7a\x30\xea\x48\xe8\x41\x77\x32\x85\x7c\xe3\x66\xde\x3e\xab\x4e\x6d\xab\xf4\x10\x10\xf8\x77\xa5\x4e\x10\xbf\xe2\x31\x12\x28\x48\x01\xd2\x46\x4d\x38\xa8\x64\xd6\x8e\xa9\x04\x02\x5b\xc1\x97\x1d\x6e\x5c\x94\x61\xd3\x66\x89\x02\x9e\xdc\x4f\x49\x0a\x2d\xa0\x3b\x8a\xfb\xa8\x95\x39\xae\x29\x9e\x4d\x96\xbd\xe2\x0e\xdd\xdc\x6a\x6b\xbe\xbd\x39\x4f\x26\x8e\xac\xce\xc4\x68\xd7\xc9\x98\x59\x29\xf8\xca\x59\x3a\x83\x97\x42\x70\xa1\x59\x35\x39\x44\x75\x9d\xd5\xf6\x4c\xa5\xe8\xc6\x54\xf8\x4c\x70\x86\x26\xc1\x4b\x49\x47\x7f\xc6\x06\x5a\x2a\xa4\xf2\x95\xff\xf4\x28\x06\x98\x1b\x95\x1e\x3f\xe8\x35\x62\x1e\x32\xbe\x93\x94\x11\x6e\xb6\xea\x06\xdc\x3e\x7d\xd2\x73\x2f\xa8\x61\x97\xe1\x3e\x3b\x51\xc5\xfd\x7d\x25\xc8\x30\x3f\xce\x8e\x93\xe6\x13\x8e\xf3\x30\x51\x49\x76\x58\x25\xdb\x9a\x2b\x7e\x2c\x45\xef\x77\xef\xf8\x99\x43\x42\x7e\x71\x77\x8d\x39\x1d\x7f\x7c\x8d\x39\x9d\x37\x59\x63\xbe\x3d\x09\xb9\x6c\x77\x03\x2b\x06\x66\xf6\x57\x14\xb1\xd3\xcd\x1b\x31\x9c\x4f\x5e\xd1\x1d\xb2\x7c\x27\xe6\x6d\xc6\xc2\xb4\xc5\x1d\xbc\x09\xde\x75\xcd\x9c\xf8\xa9\x81\xe1\x34\x78\xd4\x42\x9f\x40\x76\xd7\x1a\x7a\xcf\xed\xcc\xa4\x22\xf9\x15\x54\xa3\x1d\x7e\xe5\x07\x96\xea\x91\x8f\x73\x76\x87\xe1\xa5\x1a\xe4\x2c\x07\x94\x62\xc3\xba\xa9\xd1\x64\x76\x76\x69\x3c\x2e\x10\x6b\x53\x1e\xc1\xed\x0f\x35\x8c\x10\xb4\x86\x03\x55\x1a\x54\x9d\x52\x17\xa0\xd2\xf7\x2d\x5b\xdf\x60\xbd\xf8\x4b\x6d\xc1\xb6\xd1\xdc\x8c\x79\x7b\xb3\xc5\x33\xd0\xff\x9e\xe7\x3f\x5e\x79\x56\xcd\x66\xe5\x5f\xb5\xa4\x7e\xb4\xd9\x50\xd3\x1a\x64\x17\x48\x7b\xed\xab\x63\x2c\xf5\xfc\x89\xa1\x31\x87\xc4\x48\x5b\x07\x93\x86\x9e\x57\xf2\xdb\x93\xff\x04\x00\x00\xff\xff\x81\xde\xb8\x22\xce\x36\x00\x00" +var _flowfeesCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x3b\x5d\x73\x1b\x39\x72\xef\xfa\x15\xbd\xae\x8a\x8f\xbc\xa5\x29\xe7\xa3\xf2\xa0\x48\xf6\x69\x75\x56\xca\x95\x5c\x6e\xcb\x67\xfb\x1e\x1c\x97\x0d\xce\xf4\x90\x28\x0f\x01\x06\xc0\x48\xe2\xed\xea\xbf\xa7\xf0\x39\xf8\x1a\x8a\xb2\xbd\xa9\xca\xf1\x41\x22\x67\x80\x46\xa3\xbf\xbb\xd1\xa0\xdb\x1d\x17\x0a\x9e\x5c\x0f\x6c\x4d\x57\x3d\xbe\xe5\x5f\x90\x3d\x39\x09\x8f\x7b\x7e\x5b\x79\xf4\x17\xc5\x05\x59\xe3\x35\xa2\x7c\x72\x72\x42\x9a\x06\xa5\x9c\x91\xbe\x9f\x43\xc3\x99\x12\xa4\x51\xa0\x87\xe9\xf7\xf0\xcb\xc9\x09\x00\xc0\xe9\x29\xbc\xba\x41\xa6\x40\x6d\x88\x02\x2a\x01\xb7\x54\x29\x6c\xe1\x76\x83\x0c\x94\x5e\x43\x02\x11\x08\x2d\xee\xb8\xa4\xfa\x8d\xe2\xa0\x36\x08\x1d\x22\xdc\x90\xa1\x57\x06\x4e\xbc\x18\x1a\x80\x06\x3f\xf9\x47\x3f\x6d\x46\xb6\x7c\x60\xea\x0c\xde\x5d\xd3\xbb\x7f\xfd\x97\xf9\x23\x97\xbf\xa5\x6a\xd3\x0a\x72\xcb\xa0\x13\x7c\xfb\x08\x04\xfe\xea\x27\x7e\x0d\x02\x9d\xa6\x94\xdd\x7d\x3b\x34\x0a\xdb\x89\xa5\x34\x45\xff\xe8\x86\x64\xeb\x2c\x80\xb2\xa6\x1f\x24\xe5\xec\x55\xd7\x71\x11\xbd\xc0\x3b\x6c\x06\x55\xbc\x38\x16\x33\xd8\x11\x41\xb6\xa8\x50\x48\x68\x36\x84\xad\x71\x1a\xbb\x9f\xc3\xd0\x2b\x33\xb2\x9d\xc9\x41\xac\xf1\x9a\x34\x8a\x8b\x49\x54\xaf\xb8\x9c\x46\x37\x7e\x79\x1c\x37\x37\x08\x3d\x95\x0a\x78\x07\xcd\x86\xf6\xad\xd9\x04\x69\x1a\x4d\x2e\xbf\x05\xb9\xf4\x90\xae\x38\x53\x84\x32\x69\x79\x3d\xf4\x3d\x30\xbc\x9d\x06\x00\xa4\x6d\x05\x4a\x89\xd2\x03\x98\xe9\x89\x41\xde\xfd\x30\xaa\x24\xf6\x9d\x46\x8e\x71\x65\x37\xdc\x62\x3b\x9f\x20\xdd\x95\x5e\xe6\x1a\xf1\xd2\x61\xe9\xa9\x17\x16\x3b\x83\x0f\x97\xf6\xfb\xc7\x91\x08\x3f\x0b\x7a\x43\x94\x93\x4e\x23\xba\xb0\x1b\x56\x3d\x6d\xbc\x16\x41\x37\xb0\x46\x93\x32\x5e\x56\xe3\x35\x87\x1b\x22\xec\xbc\x33\xf8\x43\x50\xf3\xe5\x7b\x23\xe7\x05\x92\xdd\xc0\x3c\xc8\x99\xd6\x8b\x33\xf8\xc3\x2f\x89\xc9\xb0\x13\xef\xe7\xf0\x8b\x99\xab\x3f\x3d\x2a\xab\x43\xe7\xcf\xec\x7f\x22\x7f\x28\x97\x8a\x47\xaf\x48\x4f\x58\x83\x70\x61\xc6\x2f\xdd\xcf\x30\x44\xe3\xbd\x34\x28\x2f\x53\x5c\xce\x9f\xe9\xff\xf3\x30\x50\x4b\xc3\xa4\x59\x70\x50\xed\xe8\x7b\x4f\xca\x53\xf8\x77\x54\x46\x02\x3c\x12\xbc\x33\x3f\x0d\x4f\xdf\x57\xb5\x5f\x13\x65\x8d\xea\x1a\xf1\x27\x3b\x67\x36\xf7\x72\x9a\x91\xa1\xc9\xb8\x0b\x17\x76\x33\x2b\x2e\x04\xbf\xcd\x79\x3f\x73\x0c\x76\x4c\xee\x48\xdf\xaf\x48\xf3\x05\x28\x83\x86\x48\x04\xc6\x9d\x54\x06\x91\xbe\x45\x81\xd0\x08\x24\x5a\x07\xf6\x38\x52\x95\x76\x95\xb5\x2f\x80\xd1\x1e\x7e\xfd\xb5\x78\xf5\xc3\xb2\x47\xb6\x56\x1b\x3d\xe4\x79\xb4\x05\xfd\x11\xa8\x06\xc1\x62\x1e\xe4\xec\xb9\x1f\xb1\xd6\xb2\xa5\xb8\x22\xbd\xa1\xde\x05\x3c\x5f\x3e\x0f\xef\xe2\xe7\xe3\xf7\x1f\x6b\x90\xc3\x9c\x8e\x0b\xad\x82\x0e\xcf\x37\xd8\x19\x5a\xe4\xd8\xa7\x18\xd3\xce\x4a\x60\x18\xa0\xc5\x2a\x86\xe1\xa8\x3f\x9b\x67\x3b\x3d\x84\xe4\x08\x60\x49\x6e\x08\xed\xc9\xaa\xf7\xcc\x8f\x61\xdc\xd7\x88\xe2\x28\x18\xc0\xe5\x02\xf8\x93\x41\x47\x1e\x36\x5f\xd0\x90\x1d\x59\xd1\x9e\x2a\x8a\xd2\xaa\x95\xb4\xce\x78\x19\x00\xbd\x31\x0b\x49\xc3\x65\xda\x8d\xe2\x92\x58\x41\x23\x32\xa4\x6d\xad\xc0\x2c\x2b\xf6\x81\xe2\xad\x11\xf1\x29\x21\x3d\x83\xa7\x1f\xae\x3c\x36\xfb\x73\x32\xa8\xcd\xcc\x05\x06\x0b\x63\x54\x75\x1c\x20\x17\xf0\x1f\xb8\x97\x0b\x78\xcd\x56\xfc\x6e\x01\x57\x11\xfa\x73\x78\xea\xa0\xbd\xf8\xf8\x32\x62\x42\x2c\x6a\x0e\xdf\xa5\xdf\xa4\x45\xe6\xfc\x3b\xae\xfc\xc2\x19\x91\x53\xb7\xc4\x69\xbe\xd3\xc2\x52\x78\xfa\x6a\x46\x05\xfb\xac\xb9\x45\xfa\x7e\x24\xb0\x71\x4d\x5b\xb2\x07\x81\x0d\xd2\x1b\x04\x25\x08\x93\x64\xb4\xc6\x1a\x94\x66\x89\xb3\x65\x72\x01\x74\x89\x4b\x03\x75\xc7\xa5\xd4\xa6\x15\x3e\x2b\xfe\x39\x5d\x43\xbf\xf6\xc6\xdd\xb8\x0e\x19\x80\xd5\x23\x8a\x86\xf7\x3d\xea\x78\xe1\x0c\xaa\x7e\x6a\xd7\x0f\x12\x08\xdb\x07\x30\xa5\xb0\x8c\xa2\xf5\x5f\x5c\xa1\xdd\x99\x81\xef\xb6\xd6\xc2\x6a\x5f\x07\xee\x9c\xa0\xc6\x63\x83\x7d\x0b\x74\xdc\xba\x1e\xef\xa3\xc5\xdf\x49\xa0\x4c\xa1\x60\xa4\xb7\x3e\x69\xe1\x9c\xa6\xa5\xb1\x05\xf6\x3b\x09\x2d\x76\xc6\xd3\x5d\xff\xe7\x9f\xff\x1a\x00\xb9\x09\xd2\x44\x8b\x7b\xb3\x96\x9e\x2c\xb0\xb3\xfb\xb6\x60\x88\x8a\xe0\x38\x03\x33\xee\xeb\x9d\xc4\xdc\x94\xeb\xf0\x73\xed\x7c\x82\xd1\xd9\xd8\x33\x68\x4e\x07\xc2\x1a\x5a\x2c\x0b\xf7\x10\x14\xc8\x02\x7e\x63\x69\x25\x2e\x3d\x37\xb5\x06\x05\x9f\x1e\x89\xbf\x36\x9e\x35\xb7\x0f\x17\xf0\x21\xd1\x09\x37\xe8\xe3\x49\x66\xf2\x1e\xeb\x6d\x32\xfb\xa7\xd7\xa7\xda\x68\x27\x4f\x6f\x37\xb4\x47\xa0\x70\x5e\x80\xf7\x4e\xa3\xb4\xa2\x5a\x98\x38\x6b\x6c\x88\x36\x48\x2d\x27\xd8\x90\x41\x22\x6c\x07\x45\x14\x65\xeb\x10\x9f\xc8\xda\xe4\x9e\x7e\x41\x20\xbb\x1d\xb2\x16\x1a\xc2\x34\x57\x57\x08\x0d\xe9\x7b\xcb\x55\x4f\xe1\x09\x08\xa3\xde\x5c\x8c\xdf\x97\x16\xa3\xd9\x87\x7c\x1b\x1f\xe8\xc7\x40\xd1\x79\x01\x4b\x13\x84\xc2\x8f\xf0\x8f\xc9\x9b\xd8\xce\x67\xd6\x2b\x8d\x12\xef\xcb\x90\x4a\xa0\xe4\x83\x68\x10\x2e\xdb\x2d\x65\x54\x2a\x41\x14\x17\x11\x15\x4f\x4f\x43\x32\x12\x3d\x8b\x5f\x5f\xf6\xbd\x77\x18\x24\x01\xa2\x78\x98\xea\x73\x9b\x89\x6c\x26\xc7\x4a\xcb\xab\x9f\x6a\x23\xa8\x6b\xc1\xb7\xd7\x88\x26\x04\xca\x53\x9b\xa9\x30\xb0\x22\x51\x02\xb7\x84\x32\xca\xd6\x97\x5b\xe7\x8c\x2d\xac\x62\xa0\x5f\x3d\x8c\x8b\x83\x07\xb0\x52\xee\xed\x4c\x1a\x2f\xc0\x79\xb1\x4a\x29\x93\x05\xf8\x3a\xac\x94\xcd\x80\xbd\xc4\x63\x80\x65\xeb\x4f\x08\x8b\x15\x93\x9c\x1e\xf9\x93\x67\x19\xf8\x82\x52\x36\xea\x3f\x7f\x96\x6f\xc1\x4f\x0b\xdc\x4a\xe1\x44\xd1\x25\x4c\xc7\xa7\x01\xe6\xc3\x31\x2a\x7c\x7b\x9c\x0a\xdf\x35\x56\x75\xd0\x72\x82\xbe\xd0\xa2\x54\x19\xaa\x3f\x3b\xc2\x68\x33\x7b\x72\x65\xad\xcc\xa8\x3c\x1b\x04\x81\xff\x33\xa0\xd4\x18\x5b\x7a\x6a\xfb\xaf\x95\xc8\x2a\xd6\x12\xde\x6a\xf5\x0b\x6f\xb4\x6b\xd2\xff\xff\xdb\x51\x7f\x1e\xcd\x8f\xd5\x92\x4a\x58\x1b\x42\x08\xed\x9c\x58\xe4\x66\x8c\x67\x75\xae\x2f\x28\xab\x5c\x3e\x29\x8d\xd2\x7d\x6d\xd7\xa9\x4a\xfc\xe0\xf5\xac\xbe\xef\xd3\x53\x18\x98\x40\xd2\x6c\x74\x24\x5b\x1b\xe1\x08\xf3\x8e\xe1\xdd\xce\x7a\x3b\x67\xe0\xac\xf4\xb9\x75\x7e\xa8\x62\x57\x3c\x8a\x12\xb3\xb2\x5c\xe2\xe8\x55\x4c\x72\xeb\x9d\x3f\xcb\xcc\x56\x65\x0d\xe3\x3a\xad\x80\xbc\x66\x2d\xde\x69\xeb\xf1\x6f\x15\x37\x96\x8c\x29\x3d\x5a\x90\xad\xa7\x4f\x8f\x16\xa2\x5a\xba\x51\xc0\xfd\x10\x2f\xfc\xf1\x50\x02\x02\x99\x3b\x37\x76\x55\x27\x3e\x71\x12\x93\x47\xc5\x26\x10\x4e\xed\xb1\x27\xf3\x1c\x9e\x66\x99\x77\x11\xf7\x76\xfe\xbd\x79\x3d\x85\x14\x38\x93\x91\xa7\x3f\x29\x62\x45\x72\x34\x09\xeb\x28\x93\x9f\x51\xa5\x58\xfb\x18\xc3\x9f\x48\x41\xbe\xe0\xa1\x64\x2e\xf9\x4c\xba\x82\x83\xe0\x0f\xb9\x85\x04\xfa\xe4\x9b\x6f\x74\x17\xf1\xa7\x5e\x41\x49\xc5\xec\x41\x1f\x52\xaa\x69\x1d\xff\xf2\x49\xa6\x9f\xc9\xcf\x32\xbe\xca\x3d\xc4\xb1\xea\xf8\xff\xce\x9e\xdf\xe7\x3b\x3d\xda\x8e\x1f\xb6\xe1\x5f\x67\xbf\x33\xc2\x3f\xda\x6e\x4f\xd9\xec\xfb\xb8\xb2\x75\x38\x80\xb5\x65\x5a\x93\x69\x79\xca\x45\x75\x68\xa2\x80\xc7\x7a\x9a\xc7\xb0\xd2\xe4\x5c\x63\x35\xfa\x3b\x97\xa1\x33\x2e\x68\x83\xc8\xf0\x76\x5c\x4e\x07\x50\xd3\xcb\x47\x3f\x26\x70\xa8\x3c\x9c\x40\xa8\xf2\x30\x65\x45\x08\xe4\x0a\x92\x24\x18\xcf\xbf\x81\x47\x9e\x3f\x66\x5f\xd0\x99\x8d\x3d\xc0\x99\xbf\x8c\x24\x98\x7d\x82\x0a\x73\x6a\x24\xe6\x7d\x9b\x92\xd8\x6f\x6d\x9d\x6f\x6d\xfe\xdb\xb2\x27\x41\x64\x79\x3c\xb3\xd2\x79\xbf\x39\xeb\xae\x8c\x41\xb2\xbc\x5b\xd3\x1b\x64\xc0\x86\xed\x0a\x85\xb6\x67\x0c\x6f\x2b\x95\x9e\x05\xec\x08\x6d\xa1\x8b\xf8\xa7\x01\xad\xf6\xf0\x79\x47\xf6\x28\x3e\x2f\x80\xb0\x56\x27\xb7\x06\xea\xd6\x9f\xd1\xf9\x7a\x65\x51\xfd\x4a\xc0\x54\x2a\x61\x49\x05\x6c\x99\x8c\xd6\x76\x58\x63\x19\x60\x6e\xc8\x8d\x49\x2a\xbe\xe0\x5e\x5a\x34\x04\x02\x67\xfd\xde\xc9\x98\xa9\x98\xa9\x8d\xe0\xc3\x7a\x93\x40\x8a\x8a\x48\x69\xfd\x54\x87\x3e\xbe\x40\x54\x56\xaf\x16\x09\x90\xb8\xbe\xd4\x0d\x7d\xbf\xb7\xd5\x2b\x6e\x8a\x11\x79\xfd\xcb\x17\xb6\x96\x93\x6a\x60\xb3\xa0\x22\xad\x6a\xac\x4d\x7d\xcd\x94\x66\xc5\x1e\xc5\x19\x98\xa8\xce\x16\x87\xdf\x93\x7e\x40\xf8\x15\x5c\xb1\x73\x2c\x63\xe6\xda\xb2\x13\xb5\x18\xa5\xf1\x2e\xf3\xac\xea\xbd\x9f\x04\x79\xab\x23\x77\x66\x59\x12\x44\xa8\x52\x55\xd6\x36\xc1\xcc\x85\xed\x20\x4d\xb5\xc6\x70\x96\xde\xe0\x93\x43\xfe\xe5\xa1\x1c\x34\xaf\x02\xf7\x9c\xb4\xe7\xff\x97\x25\x60\x78\xf9\x12\x3e\x7c\x9c\x40\xfa\x72\xa2\x58\xf7\x31\x19\xde\x71\x01\x78\x47\xa5\xa2\x6c\x9d\xc1\xaf\x9d\x66\xd4\xd8\x97\x2c\xb6\xb4\x85\xb1\xd9\x04\x4c\x5f\xcb\x3a\xe8\xd7\x1f\x2c\xf5\x4d\xc4\xd2\xf5\x6a\x18\x8c\xa6\x76\xcc\x81\xdc\xb7\x99\x13\x66\xf3\xaf\x0c\x1e\x0d\x2d\xc9\x0e\x2e\xa2\xc9\xcb\x58\x55\x83\x08\x50\x29\x07\xfc\x36\x7e\xe7\xb5\x8b\x40\xdb\xb8\xa8\xe9\xa8\xdb\x90\x5d\x89\x6d\x9d\x11\x0d\xd9\x1d\x45\xf4\x49\xa9\x96\xe4\x06\x67\x39\x22\x0b\x50\xfc\xe0\xe1\x44\x19\xa8\x1d\x71\x96\x9c\xee\x60\x9e\x95\x31\xa3\xb3\x8e\x4b\x90\x4a\x0c\x8d\x82\x0d\xef\x5b\xca\xd6\xb5\x58\x8c\x21\xb6\x36\x1a\x6e\x48\xdf\x0c\x3d\x51\x21\x24\x90\x45\xd9\xd3\x81\x4b\xdc\x59\x52\xf4\xb4\x86\x3f\x0e\x25\x42\xf5\x58\x71\xd8\x92\x2f\x85\xff\x90\x20\x50\xee\x38\x33\x03\x36\x74\xbd\x01\x6d\x1f\x24\x70\x6b\xd6\x19\xaa\x5b\x2e\xbe\x54\x2d\xb1\x56\x80\x4a\xf0\x51\xa0\x63\xb2\x80\x86\x5b\x27\xc7\x19\xc2\xc0\xa8\xf9\x1e\x7c\x3f\xa0\x71\xe2\x36\x7d\xb8\x7e\xff\x27\x8d\xb4\x45\xcb\xfa\x25\xad\xfe\x66\xb7\x9a\x88\xc5\xac\x49\xe4\x0e\x44\xa8\xc7\x23\x19\x02\x8d\x47\x21\x59\xcc\x9a\x44\xf2\x40\xa4\x3c\x8a\x27\x65\x54\x7d\xe7\x28\x3c\x35\x4c\xe6\x8c\x23\x5a\x00\x2e\x62\xd6\x96\x43\x2b\xcb\x6a\xb3\x56\x3e\x2d\xa7\x56\x90\x82\x8b\x1a\xaa\x53\x8a\x05\xef\x51\xd0\x6e\xff\xb3\xb6\x86\xae\xe4\xf0\x06\xa5\x4e\xc8\x0c\x47\x74\xf2\x34\x46\x15\x37\xe3\x58\xe9\x06\x5f\x73\xf1\x76\x54\x82\x57\x81\x53\xb5\x76\x8f\x58\xed\x26\x97\x4d\x8e\x1d\xde\x8a\x01\x75\x0a\x6a\x8e\x22\xf5\x58\xd8\x10\x09\x72\xe8\x3a\xda\x50\x64\x63\xa3\x86\x96\x17\x93\xe8\x46\x0a\x39\x8a\x8d\x36\x08\x9c\x29\xca\x86\x7a\x9e\x66\x8d\xbe\xc3\x1e\xa3\xfd\x9c\xc1\x4f\x9c\xf7\x09\x46\x1b\x04\x9d\x7b\x6c\x87\xad\xc3\xc8\xa3\xa0\xb3\x71\xaa\x83\xb8\xa3\x71\x59\xa6\x80\xa9\x84\x1b\x13\x56\x51\x73\xbe\x48\x1d\xe1\x8f\x27\x7a\x5d\x2f\xf4\xe6\x3c\x6e\x6e\x7e\x45\x71\xed\xc6\xc8\x9d\xd9\x58\x61\xd6\x66\xa3\x9d\xe8\x6c\xff\xc1\xb8\x21\xfd\x60\x5e\x6c\xb8\x21\x4c\x4b\xf0\x10\x87\xef\x30\xa3\xee\x68\xda\x17\xb9\x0a\xd5\xf6\x16\x76\x3e\xb9\x15\x87\x63\xb4\x7f\xed\xc2\x26\xb4\xfc\x00\x53\x17\x53\x44\x59\xc0\x03\x6b\xd4\xb4\xbd\xba\x10\x5c\xd4\xa5\xaa\x9c\x9e\xa1\x62\x8a\x6a\xc9\x93\x72\x4a\x1d\x47\xb8\x98\x40\x3e\xcf\xcc\x46\x03\xf0\x08\xa5\xa6\xd2\x9f\x79\xfa\x34\xe3\xfd\x9f\x60\x85\x1d\x17\x81\x93\x6c\x0d\x24\x16\x84\xd0\xdc\xf6\x5a\xd9\x95\x28\xba\x9c\x2c\x97\x18\xa3\x4d\xe3\x91\xb8\x5e\xcc\xb8\x50\x64\x3a\x8d\x8a\xf5\xa6\xae\x59\x0b\xbf\x92\x4e\xc8\x44\xd4\x19\xe1\xa5\x3a\xf4\x32\xe4\xe2\x1d\x70\x9c\xe9\x40\x48\xd8\xe8\xc2\xa6\x93\xb9\x7f\x34\xc0\x3d\xc0\x42\x78\x5d\x57\x44\x04\x7f\xee\x61\x9f\x44\x6a\x96\x73\x3b\xda\xb1\xd7\x7b\xe2\x50\x77\x96\xc6\xe7\x8c\x7e\xe4\x8f\x1e\xdc\xd7\xab\x2c\x98\xb4\xf8\xae\xd8\xc4\xbc\xec\x1f\xd0\x59\xe2\xf1\x52\x32\x0b\xa2\xf6\xc9\xf2\xf4\xb2\x69\x54\x99\x3c\x8e\x61\xf0\x22\xd2\xd9\x7a\xdf\x68\x18\xb0\x25\x77\xaf\xea\x2d\xa4\x66\xc8\xfc\xec\x48\xbf\xe2\x5b\xec\x3c\xf5\x5c\xec\x36\x6d\xc0\x47\xd3\xaa\xc3\x8c\x2d\xb9\x4b\xd5\xcb\x37\x36\x34\x7c\xbb\x1b\x94\x69\x47\x9e\x15\x9b\xc9\x1e\x54\xba\x61\xcb\xed\xa5\x0d\x78\x01\x6d\x27\x16\x01\xe3\x5c\x77\x0e\xee\xc0\x58\x51\x0b\xe1\x4d\x61\x77\xb2\xa6\xea\xa5\x6b\x74\x31\x25\xd7\x37\x28\x51\xdc\x84\xd1\xb3\xc0\xdd\x31\xdb\x18\x59\xd9\x4d\xae\x71\xe1\x58\x36\x7b\x9e\x17\x0b\xb4\x99\xe8\x42\x69\xdc\xec\x2c\xd2\x8d\xbf\xa1\xe0\x3a\x71\x55\x80\x44\xf4\xfb\x65\xad\xce\x3b\xc5\xfe\x59\x99\x3a\xd5\x5d\x83\x12\x03\x2e\x2a\x27\x7f\x99\xab\xa8\xef\xad\x9c\x38\xe5\x49\x0a\x09\x4a\x66\x4e\xd4\xd1\xa6\x3a\x43\x0d\x1f\xc6\x9e\x24\x5b\xaf\x8f\xe7\xbd\xb6\xf9\x07\xb6\x6b\xb4\x07\xe2\xb7\x1b\x14\x18\x45\x55\x2d\x47\xc9\x94\xad\x6b\x11\xdf\xc7\xa4\x04\x92\x74\x3d\x22\xe1\x79\xaa\x09\x63\xa3\x6c\x7c\x52\xe6\xce\x0b\x55\x38\xc3\x83\x8b\xd1\x14\x14\x1d\x74\xdf\x76\x1c\x38\x62\x30\x2e\x77\xa8\x23\xf4\x51\x82\xe2\x0c\x76\x1e\xd8\xac\xbc\xbb\xc3\x16\xa8\x8a\x79\x10\x89\x6b\x71\x08\x53\x68\x6d\xd2\xfc\xf5\x80\x5c\x7a\xc0\x2f\x2e\x8e\x92\xbd\xaf\x12\xd8\xa3\x85\xb5\x68\x44\xbc\xb2\x51\x81\xe9\xf7\x4b\xdc\xbf\x26\x84\x1c\x56\xae\x1f\x50\x71\x77\xad\xc0\x67\xe5\x01\x40\x68\x0a\xba\x1c\xd4\xc6\xd7\x6c\x4c\x98\x30\xce\xa6\xf5\xc6\x67\x0b\x31\x45\x70\xf6\x49\x0f\x3b\xec\x75\x1e\x7f\x4b\x21\x6b\x8d\xeb\x10\xc3\x19\xe8\xf7\xb0\xfe\x38\x69\xfa\x69\x17\x2f\x76\x84\xfd\x14\xe8\xba\x0f\xad\x67\x0b\x74\x5f\x40\xcb\x4d\x4f\xa2\x0f\xa5\x16\xf9\x7c\x53\x5c\xb6\x6a\x3f\x02\x19\x18\x43\x4d\x74\x22\x68\xbf\x0f\xdd\x9d\x51\xd3\x67\xaa\x5c\x35\xb5\x2b\xec\x01\xa9\x98\x82\xef\xda\x36\x90\x20\xf6\xf2\xa5\x3f\x7f\x0c\x45\xaf\x9a\xdc\x9c\xc1\x3b\x66\xf2\x12\xc5\x5d\xb7\x31\x08\xec\x50\xa0\x56\x3d\x17\x12\x7a\x33\x6b\x76\x63\x6d\xe5\x93\xf9\xc9\x04\xb3\x5e\x54\xac\x52\x85\x69\xee\x4c\x76\x50\x83\x31\xcb\x3a\xce\xe6\xad\x36\x2a\x6a\x03\xb7\xd4\x5c\x04\xb9\xd1\xa9\xa6\x76\x8c\xa4\xd9\x60\x5b\xf0\x8d\x48\x6f\x82\x6c\x87\xa9\x40\x18\x58\x8b\xa1\x0b\x25\x58\x1f\x8f\x84\x05\xcb\x9d\xd1\x57\x1b\xa4\x22\x56\x5c\x19\x2e\x8a\x00\xd5\x3a\xed\x7a\x4c\xf3\xec\x25\x6a\x03\x74\x88\x5c\x0d\x42\x20\x53\xfd\xde\xee\xc3\xdd\x3a\xf1\x55\xb3\x8e\xd0\xbe\x88\xfc\x67\x44\x86\xfb\x33\xd6\xf9\xbb\x42\x90\x29\xa9\x7b\x2f\x37\x15\x0b\xf7\x7c\x4d\x9b\x79\x41\x90\x9f\x06\x15\x97\xeb\x84\xe6\x36\xd6\xbc\xe7\x8d\xe3\xa6\xf6\x60\x0b\x5f\x6c\xb0\x0f\x37\x44\x42\x8f\x52\x46\x09\xab\x9f\x3c\x1e\xad\x57\x93\x09\xff\x89\x6d\xc4\x71\xfe\xc9\xf5\xee\xbc\xf7\x2d\x75\xd1\xac\xa2\x15\x22\x40\x8f\x6c\x85\xb3\x44\x86\x5b\x5a\xce\xff\xcc\x4c\x15\x36\x9c\xeb\x9c\x3f\x0b\xe0\xd3\xe0\xf2\xad\xab\xa7\xfa\xd2\x69\xe4\xec\x04\x36\x9c\xd9\xc2\x0d\xb6\x30\x48\x5f\x7e\x6d\x89\x22\xde\x74\x53\xe9\x2e\x10\xe9\x0c\xc9\xdd\x57\xf9\x39\x39\x26\x37\xb4\xef\x79\xf3\x65\xbc\x1c\x65\x67\x6c\x4c\xdd\xda\x5d\x35\x03\x5f\x3c\xae\xde\x30\x0b\x3b\xae\x98\xef\xaf\xb0\xb0\x90\xba\x31\x5b\xef\xdd\xed\x7a\x8a\x6d\xb8\xca\xd4\xf7\xb0\xe6\x5a\x3e\x38\xc3\xda\x25\xac\x3c\x65\x6c\xac\x02\x1c\x3e\x9e\xf2\x44\xf2\x83\x13\x97\xc9\x5a\xbc\x1b\x3b\xc2\x69\x66\xd1\xd3\x4e\xc6\x45\x28\x70\x5b\x54\x57\x51\x9f\xbd\x3f\x4e\x1c\x2f\xb4\xc4\x0e\xd4\x5e\xae\x30\x27\x80\xd3\xd2\xf2\x29\xdc\xcc\x3a\xea\x96\xd5\xdf\xc1\xf5\xa2\x03\x77\xbb\x6e\x4a\xbf\xf2\x80\xc3\xbb\xf3\xcd\x45\x6b\x8c\x3d\x8d\x79\x1a\xb5\x06\x98\x36\xb6\xb4\x1b\xe9\x35\x53\x33\x3f\xfd\x1f\xe0\xdd\x6b\xa6\xfe\xf9\x9f\x8a\x23\x19\xbf\x8f\x79\x1a\x2b\x7c\xaf\xf6\x3f\x07\xca\x1d\x96\x8b\xb4\xb1\x2e\x39\x13\xf3\xa1\x7c\x26\x24\xfe\xa6\xc1\xfd\x8b\xd9\xa9\xbd\x0e\x38\x3a\x69\xff\xae\xd6\xde\xe7\x57\x3c\x86\x03\x15\x2e\x40\xda\x10\x0f\x07\x85\xcc\xea\x16\x95\x40\x60\x27\xf8\xaa\xc7\xad\xf3\xfc\xb6\x94\x95\x08\xe0\xc9\xe3\x84\xa4\xd2\x6b\x9f\x5d\xc5\x88\x1b\x45\xce\x26\x8f\xa2\x0e\x5d\x43\x6a\xf8\x6e\x7f\x9e\x4c\x2c\xe2\x22\x13\x37\xdd\x25\x63\xe6\xb5\x80\x28\x47\xe9\x0c\x5e\x09\xc1\x85\x46\xd5\xd4\xf5\xd4\x5d\x76\xde\x66\x4e\x6f\xf6\xe6\xd4\xcd\x04\x4c\x68\x8a\xae\x94\xf4\xf4\x6f\xd8\x42\x47\x85\x54\xbe\x9d\x2b\x25\xc5\x68\x7a\x8a\x7e\x92\x4f\x7a\x8d\x18\x87\x0c\xef\xa4\x8c\x83\xdb\x9d\xda\xfb\x6b\x67\xbe\x10\x79\x2b\xa8\x41\x97\xe1\x6d\x46\x51\xc5\x7d\x0e\x11\x78\x58\x3d\xcf\x7f\x3c\x39\x0f\x03\x35\xc7\xa9\xc9\xb6\x16\xc9\x51\xea\x41\x88\xde\x17\x3e\x70\x9f\x39\x01\xbf\x7c\xb8\x71\x28\x1d\x7f\x7c\xe3\x50\x3a\x6f\xb2\x71\xe8\xfe\x24\xd4\x97\x5d\x56\x54\x0d\x96\xec\x4d\xe1\xd8\x11\xe6\xdd\x75\xce\x4f\xda\xa6\xa1\x0c\x4d\xf3\x36\x43\x61\x5a\xe3\x0e\x66\x67\x0f\xa5\x7e\x13\xd7\x69\x0d\xa6\xc1\xcb\x55\x9a\xbf\xb2\xfc\x67\xbc\xcb\x69\x67\x26\xa7\x84\xbf\x87\x59\xb1\xc3\xdf\xfb\x81\xb5\x33\xc2\x1f\x73\x74\xc7\xe1\xb5\x73\xc1\x79\x6e\x50\xaa\x17\x40\xcd\xb9\x49\xa6\x67\xb6\x7d\x0b\x88\xd5\x29\x6f\xc1\xed\x65\x64\xc3\x04\x2d\xe1\x40\x4d\xfb\x88\x13\xea\x8a\xa9\xf4\x17\x44\xac\x6f\xb0\x5e\xfc\x95\xd6\x60\x7b\xa3\xc7\x8c\x79\xbb\xdf\xe1\x19\xe8\xbf\xe7\xf9\x05\xed\x17\xb3\xf9\xbc\x7e\x73\x3b\xf5\xa3\xed\x96\x9a\x7e\x4f\xd7\xfe\x93\x5c\x6a\x9a\x1d\xa3\xa9\xe7\xcf\x0c\x8c\xac\xdf\xa1\x73\x66\xd2\xc0\xf3\x42\x7e\x7f\xf2\xbf\x01\x00\x00\xff\xff\x62\xfe\x81\x8f\xb7\x42\x00\x00" func flowfeesCdcBytes() ([]byte, error) { return bindataRead( @@ -145,7 +145,7 @@ func flowfeesCdc() (*asset, error) { } info := bindataFileInfo{name: "FlowFees.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe4, 0x4, 0xfd, 0x59, 0xb0, 0x55, 0x66, 0x44, 0xa3, 0xdf, 0x65, 0x18, 0x38, 0xb9, 0x76, 0x30, 0x9e, 0x46, 0x80, 0x90, 0x68, 0x6, 0x34, 0x19, 0x43, 0x95, 0x49, 0x7e, 0xed, 0x1e, 0xe6, 0x83}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe0, 0x53, 0x38, 0x5f, 0xad, 0x92, 0x92, 0x30, 0x2f, 0x42, 0xac, 0x2a, 0x30, 0x53, 0x13, 0x3e, 0x37, 0x5a, 0x78, 0x4, 0x52, 0x74, 0x9, 0x8a, 0x66, 0xad, 0xec, 0x5f, 0x20, 0xc0, 0x61, 0xc1}} return a, nil } diff --git a/lib/go/templates/internal/assets/assets.go b/lib/go/templates/internal/assets/assets.go index 90865e24b..0562423a4 100644 --- a/lib/go/templates/internal/assets/assets.go +++ b/lib/go/templates/internal/assets/assets.go @@ -1,7 +1,7 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: // FlowServiceAccount/add_account_creator.cdc (564B) -// FlowServiceAccount/add_fee_child_accounts.cdc (833B) +// FlowServiceAccount/add_fee_child_accounts.cdc (645B) // FlowServiceAccount/deposit_fees.cdc (823B) // FlowServiceAccount/remove_account_creator.cdc (566B) // FlowServiceAccount/scripts/get_account_creators.cdc (117B) @@ -9,6 +9,7 @@ // FlowServiceAccount/scripts/get_execution_effort_weights.cdc (131B) // FlowServiceAccount/scripts/get_execution_memory_limit.cdc (119B) // FlowServiceAccount/scripts/get_execution_memory_weights.cdc (131B) +// FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc (544B) // FlowServiceAccount/scripts/get_fees_balance.cdc (89B) // FlowServiceAccount/scripts/get_is_account_creation_restricted.cdc (121B) // FlowServiceAccount/scripts/get_is_account_creator.cdc (133B) @@ -420,7 +421,7 @@ func flowserviceaccountAdd_account_creatorCdc() (*asset, error) { return a, nil } -var _flowserviceaccountAdd_fee_child_accountsCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x52\xcd\x6e\xe2\x30\x10\xbe\xe7\x29\xbe\xd3\xca\xd1\x46\x61\xf7\x1a\x11\x10\x8b\xb4\x12\xea\xb1\x6a\x2f\x88\xc3\xe0\x0c\xc5\x52\xb0\x2d\xdb\x81\xa2\x8a\x77\xaf\x92\x90\xa4\x01\xa9\x97\x32\xc7\xf1\xcc\xf7\x37\x0e\x8e\xb4\x27\x19\x94\xd1\x82\xa4\x34\x95\x0e\x3e\xc3\x4a\x87\x18\x1f\x11\x00\x58\xc7\x96\x1c\x0b\x2a\x0e\x4a\x67\xa0\x2a\xec\xc5\x73\x30\x8e\xde\x38\xc1\x3f\xe3\x9c\x39\xbd\x52\x59\x71\x82\x17\x5b\x50\xe0\xa5\xd1\xc1\x91\x0c\x31\x7e\x2d\x5a\xbc\x0e\x09\x40\xc9\x01\x3b\xe6\xe5\x5e\x95\xc5\xa2\x67\x5b\x2f\xc9\xd2\x56\x95\x2a\x9c\xa7\x63\xfc\x0e\xcc\x27\x78\xe2\xb3\x4f\xb0\xd2\x5b\xf3\x9e\xa0\x5f\x50\xec\x07\xa2\xd9\x06\x79\xc7\xd4\x54\xa3\x39\xf5\x2d\x5a\x5a\x1a\x2a\xa6\x8f\xe3\x9a\x89\x9d\x33\x87\x0c\x93\x2b\xfe\xa4\x71\xf5\x9f\xb9\x33\x16\x63\x3e\xc7\x7a\x13\xf5\x92\x8e\xe4\xa0\x90\xe3\x4f\xdf\x39\xed\x55\xc9\x50\x98\xa2\xcb\x7e\xc8\xaa\xa9\x7a\x5c\xe1\x37\xfe\x8e\xba\x75\x8c\x24\x25\x72\x5c\xb9\x84\xa5\x33\xbb\xac\x35\x1c\xdf\xcd\x4a\xb2\xc8\xeb\x8d\x54\x7e\x31\x33\x1a\xab\x2b\xbd\x8a\xb8\x7f\x50\xde\x57\xfc\xb3\xbc\x44\x1c\x8d\x70\x6f\xbf\x41\x4a\xd6\xb2\x2e\x84\x24\x3b\x18\xb8\x0c\x3b\xe3\x5b\x7a\x3a\xf2\x63\x6f\x79\x23\x27\x41\x30\xdf\xdd\x36\x6a\xe5\x5d\xa2\xcf\x00\x00\x00\xff\xff\x89\xf8\xab\xb5\x41\x03\x00\x00" +var _flowserviceaccountAdd_fee_child_accountsCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x92\x3f\x8b\xdc\x30\x10\xc5\x7b\x7f\x8a\xc7\x16\x87\x17\x0e\xbb\x37\x49\x8e\xcb\xc2\x42\x8a\xb4\xe9\x67\xa5\xf1\x5a\x60\x6b\xcc\x68\x7c\xcb\x12\xee\xbb\x07\xcb\x7f\x88\x8b\x44\x8d\x0b\xf9\xfd\x7e\x4f\xc3\x84\x61\x14\x35\x9c\xae\xbd\x3c\xae\xcc\xe9\x54\x14\x75\x5d\xe3\xa2\x4c\xc6\x09\xd6\x31\xee\xe1\x83\x23\xe2\x34\xdc\x58\x21\x2d\x22\x3f\xe0\xba\xd0\x7b\xb4\xcc\x20\xe7\x64\x8a\x96\x5e\x31\x52\xf0\x68\x45\x71\x7b\xce\xb9\xcc\x49\xe1\x1e\x59\x5f\x41\xd1\x43\xf9\x1e\x92\xb1\x66\xea\x80\x10\xb1\x49\x41\x69\xe7\xc0\x3a\x32\x0c\xf4\x84\xb2\xe3\xf0\xb1\x70\x4c\x29\x26\x72\x16\x24\x66\xab\xe7\x51\x52\xb0\x54\xe5\xdb\x9f\x53\x32\xdc\x78\xb1\xf9\xd5\xbf\x11\xf1\xe8\x82\xeb\xd0\x49\xef\x97\xf7\xec\xd6\x77\x3f\x84\x18\x92\x29\x99\x68\x55\xfc\xe5\x28\xb7\x36\x0d\x7e\x44\x3b\xe3\x77\x01\x00\xa3\xf2\x48\xca\x25\xcd\xb9\x06\x34\x59\x57\x7e\x17\x55\x79\xfc\xa2\x7e\xe2\x33\x5e\xde\x97\xd8\x16\x98\x4f\xcf\x86\x76\x35\x66\x21\xbe\x22\x03\xaa\x64\xa2\x74\xe7\xea\x96\x11\x5f\x5e\xb6\x5e\xd5\xa1\xd7\xb7\xb2\x55\x19\x1a\xd4\xeb\xef\xf5\x01\x76\xde\x3d\xf3\x79\x7b\xc3\x48\x31\xb8\xf2\x74\x91\xa9\xf7\x88\x62\x58\xe8\x20\x28\xb7\xac\x1c\x1d\xc3\xe4\x3f\x73\xc0\xac\xfb\x87\xed\x74\x2e\x76\xdf\xe1\xa2\x72\x79\x5f\x2e\xf3\x56\x5c\x99\xd7\x31\xa4\x32\x7f\x9a\xc3\x8e\x3c\x59\x9b\x65\x00\x4b\xf7\xcf\xe2\xb3\xf8\x13\x00\x00\xff\xff\x2f\xcb\x4e\x63\x85\x02\x00\x00" func flowserviceaccountAdd_fee_child_accountsCdcBytes() ([]byte, error) { return bindataRead( @@ -436,7 +437,7 @@ func flowserviceaccountAdd_fee_child_accountsCdc() (*asset, error) { } info := bindataFileInfo{name: "FlowServiceAccount/add_fee_child_accounts.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xdf, 0xf7, 0x43, 0x4f, 0x3, 0xef, 0x43, 0x3f, 0xb0, 0xf4, 0x15, 0xef, 0x89, 0x48, 0x5f, 0xec, 0xf3, 0x88, 0x31, 0x1b, 0xec, 0x5b, 0x72, 0xb4, 0x62, 0x9c, 0x75, 0x29, 0x24, 0x4c, 0xac}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xe6, 0xbc, 0xc, 0x89, 0x7b, 0x1f, 0xfc, 0x7, 0xa1, 0xab, 0xfc, 0x2e, 0x91, 0xc4, 0x8, 0x38, 0xa0, 0xc9, 0xca, 0x86, 0xbc, 0x8b, 0xb9, 0x11, 0xda, 0xfe, 0xc1, 0xe2, 0x40, 0x9c, 0x96}} return a, nil } @@ -580,6 +581,26 @@ func flowserviceaccountScriptsGet_execution_memory_weightsCdc() (*asset, error) return a, nil } +var _flowserviceaccountScriptsGet_fee_receiver_addressesCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x41\x6b\xdc\x30\x10\x85\xef\xfe\x15\x8f\x5c\xb2\x0b\xc1\xb9\xe7\x96\x8b\x4f\xa5\x85\x5c\x7a\x28\x85\xcc\x4a\xcf\xb5\x40\x96\x8c\x66\xbc\xc1\x94\xfe\xf7\x22\x79\x5d\xba\x90\xab\x66\xe6\xd3\xfb\x66\xc2\xbc\xe4\x62\x78\x18\x62\xfe\x18\x48\x7d\xe8\xba\xe7\x67\xbc\xd1\xd6\x92\x14\x36\x11\xe2\x7d\xa1\x2a\x15\x79\x84\xc4\x08\x71\x2e\xaf\xc9\x6a\x55\x0c\xb3\x6c\x28\x74\x0c\x57\xc2\x8a\x24\x15\x67\x21\xa7\x4a\x19\x49\x78\x2e\x59\x83\xe9\x13\x42\xcf\xbe\x01\x97\xac\x1a\x2e\x91\x78\xb7\xfc\x7e\x8f\xaf\xe5\xdb\x04\x78\x65\x32\xad\x1c\xce\xc1\x8c\x1e\x1f\x13\x53\x85\x2a\xa4\x10\x2e\xc7\x48\x67\xf4\x2f\x6d\xec\x10\x38\xe2\x61\x89\xab\x42\xd2\x56\x09\x6e\x0a\xd1\xb7\x3c\x47\xf8\xbe\x3e\x7f\xcd\xc6\xdd\xa2\x51\x6f\x1a\x1e\x97\xed\x73\x64\x30\x65\x1c\xdb\xef\x13\xa3\x47\x68\x9a\x77\xad\x2e\x27\x2b\xe2\xec\x51\x11\x92\xb1\x24\x89\xb8\xca\x1a\xed\x09\x29\x1b\x42\xda\x77\xba\x03\x1f\x15\x9e\x63\xad\x56\xce\xf0\xe5\xdb\xf7\xa3\x57\x73\xed\xdb\xda\x57\x75\xae\x70\xdc\x65\x77\x82\xd8\x7f\x88\x8b\x44\x49\x8e\x7d\x27\xce\x51\xf5\x24\x31\x9e\x31\xae\x09\xb3\x84\x74\x3a\xbf\xe0\xc7\xeb\xbe\xe3\x9f\xf8\xdd\x01\x40\x69\xd7\xfd\x97\xb9\xff\x45\x1b\xc8\xb7\xdd\xbe\xbc\x1e\x07\x39\x9d\xbb\x3f\xdd\xdf\x00\x00\x00\xff\xff\xb3\x6f\x0a\xae\x20\x02\x00\x00" + +func flowserviceaccountScriptsGet_fee_receiver_addressesCdcBytes() ([]byte, error) { + return bindataRead( + _flowserviceaccountScriptsGet_fee_receiver_addressesCdc, + "FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc", + ) +} + +func flowserviceaccountScriptsGet_fee_receiver_addressesCdc() (*asset, error) { + bytes, err := flowserviceaccountScriptsGet_fee_receiver_addressesCdcBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0x6f, 0xd5, 0x9, 0x6d, 0xd9, 0x7a, 0x12, 0xf4, 0x84, 0x77, 0x96, 0x72, 0x70, 0x71, 0x8, 0x32, 0xfd, 0xe, 0x68, 0xf9, 0xe8, 0x0, 0x25, 0x88, 0x2f, 0xa5, 0x48, 0x36, 0xc, 0x3, 0x20}} + return a, nil +} + var _flowserviceaccountScriptsGet_fees_balanceCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcc\x2d\xc8\x2f\x2a\x51\x50\x72\xcb\xc9\x2f\x77\x4b\x4d\x2d\x56\xe2\xe2\x4a\x4c\x4e\x4e\x2d\x2e\xd6\x48\xcc\xc9\xd1\x54\x48\x2b\xcd\x53\xc8\x4d\xcc\xcc\xd3\xd0\xb4\x52\x08\x75\xcb\xac\x30\x33\x51\xa8\xe6\x52\x50\x50\x50\x28\x4a\x2d\x29\x2d\xca\x53\x80\x69\xd3\x4b\x4f\x2d\x71\x4b\x4d\x75\x4a\xcc\x49\xcc\x4b\x4e\xd5\xd0\xe4\xaa\x05\x04\x00\x00\xff\xff\xe6\xa5\x8c\x1c\x59\x00\x00\x00" func flowserviceaccountScriptsGet_fees_balanceCdcBytes() ([]byte, error) { @@ -7140,6 +7161,7 @@ var _bindata = map[string]func() (*asset, error){ "FlowServiceAccount/scripts/get_execution_effort_weights.cdc": flowserviceaccountScriptsGet_execution_effort_weightsCdc, "FlowServiceAccount/scripts/get_execution_memory_limit.cdc": flowserviceaccountScriptsGet_execution_memory_limitCdc, "FlowServiceAccount/scripts/get_execution_memory_weights.cdc": flowserviceaccountScriptsGet_execution_memory_weightsCdc, + "FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc": flowserviceaccountScriptsGet_fee_receiver_addressesCdc, "FlowServiceAccount/scripts/get_fees_balance.cdc": flowserviceaccountScriptsGet_fees_balanceCdc, "FlowServiceAccount/scripts/get_is_account_creation_restricted.cdc": flowserviceaccountScriptsGet_is_account_creation_restrictedCdc, "FlowServiceAccount/scripts/get_is_account_creator.cdc": flowserviceaccountScriptsGet_is_account_creatorCdc, @@ -7522,6 +7544,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "get_execution_effort_weights.cdc": {flowserviceaccountScriptsGet_execution_effort_weightsCdc, map[string]*bintree{}}, "get_execution_memory_limit.cdc": {flowserviceaccountScriptsGet_execution_memory_limitCdc, map[string]*bintree{}}, "get_execution_memory_weights.cdc": {flowserviceaccountScriptsGet_execution_memory_weightsCdc, map[string]*bintree{}}, + "get_fee_receiver_addresses.cdc": {flowserviceaccountScriptsGet_fee_receiver_addressesCdc, map[string]*bintree{}}, "get_fees_balance.cdc": {flowserviceaccountScriptsGet_fees_balanceCdc, map[string]*bintree{}}, "get_is_account_creation_restricted.cdc": {flowserviceaccountScriptsGet_is_account_creation_restrictedCdc, map[string]*bintree{}}, "get_is_account_creator.cdc": {flowserviceaccountScriptsGet_is_account_creatorCdc, map[string]*bintree{}}, diff --git a/lib/go/templates/service_templates.go b/lib/go/templates/service_templates.go index dd0d986b6..ef5bfca01 100644 --- a/lib/go/templates/service_templates.go +++ b/lib/go/templates/service_templates.go @@ -29,17 +29,18 @@ const ( addAccountCreator = "FlowServiceAccount/add_account_creator.cdc" removeAccountCreator = "FlowServiceAccount/remove_account_creator.cdc" - depositFeesFilename = "FlowServiceAccount/deposit_fees.cdc" - getFeesBalanceFilename = "FlowServiceAccount/scripts/get_fees_balance.cdc" - getFeeParametersFilename = "FlowServiceAccount/scripts/get_tx_fee_parameters.cdc" - setFeeParametersFilename = "FlowServiceAccount/set_tx_fee_parameters.cdc" - setFeeSurgeFactorFilename = "FlowServiceAccount/set_tx_fee_surge_factor.cdc" - getExecutionEffortWeighs = "FlowServiceAccount/scripts/get_execution_effort_weights.cdc" - setExecutionEffortWeighs = "FlowServiceAccount/set_execution_effort_weights.cdc" - getExecutionMemoryWeighs = "FlowServiceAccount/scripts/get_execution_memory_weights.cdc" - setExecutionMemoryWeighs = "FlowServiceAccount/set_execution_memory_weights.cdc" - getExecutionMemoryLimit = "FlowServiceAccount/scripts/get_execution_memory_limit.cdc" - setExecutionMemoryLimit = "FlowServiceAccount/set_execution_memory_limit.cdc" + depositFeesFilename = "FlowServiceAccount/deposit_fees.cdc" + getFeesBalanceFilename = "FlowServiceAccount/scripts/get_fees_balance.cdc" + getFeeReceiverAddressesFilename = "FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc" + getFeeParametersFilename = "FlowServiceAccount/scripts/get_tx_fee_parameters.cdc" + setFeeParametersFilename = "FlowServiceAccount/set_tx_fee_parameters.cdc" + setFeeSurgeFactorFilename = "FlowServiceAccount/set_tx_fee_surge_factor.cdc" + getExecutionEffortWeighs = "FlowServiceAccount/scripts/get_execution_effort_weights.cdc" + setExecutionEffortWeighs = "FlowServiceAccount/set_execution_effort_weights.cdc" + getExecutionMemoryWeighs = "FlowServiceAccount/scripts/get_execution_memory_weights.cdc" + setExecutionMemoryWeighs = "FlowServiceAccount/set_execution_memory_weights.cdc" + getExecutionMemoryLimit = "FlowServiceAccount/scripts/get_execution_memory_limit.cdc" + setExecutionMemoryLimit = "FlowServiceAccount/set_execution_memory_limit.cdc" verifyPayerBalanceForTxExecution = "FlowServiceAccount/scripts/verify_payer_balance_for_tx_execution.cdc" @@ -186,6 +187,12 @@ func GenerateGetFeesBalanceScript(env Environment) []byte { return []byte(ReplaceAddresses(code, env)) } +func GenerateGetFeeReceiverAddressesScript(env Environment) []byte { + code := assets.MustAssetString(getFeeReceiverAddressesFilename) + + return []byte(ReplaceAddresses(code, env)) +} + func GenerateDepositFeesScript(env Environment) []byte { code := assets.MustAssetString(depositFeesFilename) diff --git a/tests/flow_fees_test.cdc b/tests/flow_fees_test.cdc new file mode 100644 index 000000000..72fda039b --- /dev/null +++ b/tests/flow_fees_test.cdc @@ -0,0 +1,164 @@ +import Test +import FlowFees from 0x0000000000000007 + +// The Cadence testing framework bootstraps FlowFees at 0x0000000000000004, +// but it cannot sign transactions for that account, so these tests deploy +// and test FlowFees on the test admin account 0x0000000000000007 instead. +access(all) let admin = Test.getAccount(0x0000000000000007) +access(all) let serviceAccount = Test.serviceAccount() +access(all) let flowFeesAddress = Address(0x0000000000000007) + +access(all) fun setup() { + // Test.deployContract cannot be used here: it would deploy to FlowFees' + // testing alias (0x4), which is already occupied by the bootstrap. + + // Contract code deployed via a transaction cannot use string imports, + // so point them at the framework's bootstrapped core contracts + var code = Test.readFile("../contracts/FlowFees.cdc") + code = code.replaceAll(of: "\"FungibleToken\"", with: "FungibleToken from 0x0000000000000002") + code = code.replaceAll(of: "\"FlowToken\"", with: "FlowToken from 0x0000000000000003") + code = code.replaceAll(of: "\"FlowStorageFees\"", with: "FlowStorageFees from 0x0000000000000001") + + let addResult = Test.executeTransaction(Test.Transaction( + code: Test.readFile("./transactions/add_contract.cdc"), + authorizers: [admin.address], + signers: [admin], + arguments: ["FlowFees", code], + )) + Test.expect(addResult, Test.beSucceeded()) +} + +/// Reads a file that imports FlowFees and points the import at the +/// test deployment of FlowFees instead of the bootstrapped one at 0x4 +access(all) fun readFileWithTestFlowFees(_ path: String): String { + return Test.readFile(path) + .replaceAll(of: "\"FlowFees\"", with: "FlowFees from 0x0000000000000007") +} + +access(all) fun getFeeReceiverAddresses(): [Address] { + let result = Test.executeScript( + readFileWithTestFlowFees("../transactions/FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc"), + [] + ) + Test.expect(result, Test.beSucceeded()) + return result.returnValue! as! [Address] +} + +access(all) fun getFeesBalance(): UFix64 { + let result = Test.executeScript( + readFileWithTestFlowFees("../transactions/FlowServiceAccount/scripts/get_fees_balance.cdc"), + [] + ) + Test.expect(result, Test.beSucceeded()) + return result.returnValue! as! UFix64 +} + +access(all) fun runAddFeeChildAccounts(_ accounts: Int): Test.TransactionResult { + return Test.executeTransaction(Test.Transaction( + code: readFileWithTestFlowFees("../transactions/FlowServiceAccount/add_fee_child_accounts.cdc"), + authorizers: [admin.address], + signers: [admin], + arguments: [accounts], + )) +} + +access(all) fun testGetFeeReceiverAddressesWithNoChildAccounts() { + Test.assertEqual([flowFeesAddress], getFeeReceiverAddresses()) +} + +access(all) fun testAddChildFeeAccounts() { + let result = runAddFeeChildAccounts(2) + Test.expect(result, Test.beSucceeded()) + + let addresses = getFeeReceiverAddresses() + Test.assertEqual(3, addresses.length) + Test.assertEqual(flowFeesAddress, addresses[0]) + Test.assert(addresses[1] != addresses[2], message: "child fee accounts should be distinct") + + let events = Test.eventsOfType(Type()) + Test.assertEqual(1, events.length) + let changeEvent = events[0] as! FlowFees.ChildFeeAccountsChanged + Test.assertEqual([addresses[1], addresses[2]], changeEvent.addresses) +} + +access(all) fun testAddMoreChildFeeAccountsAppends() { + let previousChildren = getFeeReceiverAddresses().slice(from: 1, upTo: 3) + + let result = runAddFeeChildAccounts(1) + Test.expect(result, Test.beSucceeded()) + + let addresses = getFeeReceiverAddresses() + Test.assertEqual(4, addresses.length) + + let events = Test.eventsOfType(Type()) + Test.assertEqual(2, events.length) + let changeEvent = events[1] as! FlowFees.ChildFeeAccountsChanged + // the event contains the full new list of child fee accounts, + // with the previously added accounts first + Test.assertEqual([addresses[1], addresses[2], addresses[3]], changeEvent.addresses) + Test.assertEqual(previousChildren, changeEvent.addresses.slice(from: 0, upTo: 2)) +} + +access(all) fun testCannotAddZeroChildFeeAccounts() { + let previousAddresses = getFeeReceiverAddresses() + + let result = runAddFeeChildAccounts(0) + Test.expect(result, Test.beFailed()) + Test.assertError(result, errorMessage: "must be positive") + + Test.assertEqual(previousAddresses, getFeeReceiverAddresses()) + Test.assertEqual(2, Test.eventsOfType(Type()).length) +} + +access(all) fun testFeeBalanceAggregatesChildAccounts() { + let balanceBefore = getFeesBalance() + + // transfer FLOW straight to a child fee account's public receiver + let childAddress = getFeeReceiverAddresses()[1] + let transferResult = Test.executeTransaction(Test.Transaction( + code: Test.readFile("../transactions/flowToken/transfer_tokens.cdc"), + authorizers: [serviceAccount.address], + signers: [serviceAccount], + arguments: [5.0, childAddress], + )) + Test.expect(transferResult, Test.beSucceeded()) + Test.assertEqual(balanceBefore + 5.0, getFeesBalance()) + + // deposit into the main FlowFees vault + let depositResult = Test.executeTransaction(Test.Transaction( + code: readFileWithTestFlowFees("../transactions/FlowServiceAccount/deposit_fees.cdc"), + authorizers: [serviceAccount.address], + signers: [serviceAccount], + arguments: [3.0], + )) + Test.expect(depositResult, Test.beSucceeded()) + Test.assertEqual(balanceBefore + 8.0, getFeesBalance()) +} + +access(all) fun testDeductTransactionFeeDepositsToChildAccounts() { + // fee parameters are not initialized on a fresh FlowFees deployment, + // so they need to be set before fees can be computed + let setParamsResult = Test.executeTransaction(Test.Transaction( + code: readFileWithTestFlowFees("../transactions/FlowServiceAccount/set_tx_fee_parameters.cdc"), + authorizers: [admin.address], + signers: [admin], + arguments: [1.0, 1.0, 1.0], + )) + Test.expect(setParamsResult, Test.beSucceeded()) + + let balanceBefore = getFeesBalance() + + let result = Test.executeTransaction(Test.Transaction( + code: Test.readFile("./transactions/deduct_transaction_fee.cdc"), + authorizers: [serviceAccount.address], + signers: [serviceAccount], + arguments: [1.0, 1.0], + )) + Test.expect(result, Test.beSucceeded()) + + // fee = surgeFactor * (inclusionEffort * inclusionEffortCost + executionEffort * executionEffortCost) + // = 1.0 * (1.0 * 1.0 + 1.0 * 1.0) = 2.0 + // the fee is deposited to one of the child fee accounts, + // where getFeeBalance picks it up + Test.assertEqual(balanceBefore + 2.0, getFeesBalance()) +} diff --git a/tests/transactions/add_contract.cdc b/tests/transactions/add_contract.cdc new file mode 100644 index 000000000..4d791fe84 --- /dev/null +++ b/tests/transactions/add_contract.cdc @@ -0,0 +1,6 @@ +transaction(name: String, code: String) { + prepare(account: auth(AddContract) &Account) { + // Add the contract + account.contracts.add(name: name, code: code.utf8) + } +} diff --git a/tests/transactions/deduct_transaction_fee.cdc b/tests/transactions/deduct_transaction_fee.cdc new file mode 100644 index 000000000..05ebd3c82 --- /dev/null +++ b/tests/transactions/deduct_transaction_fee.cdc @@ -0,0 +1,9 @@ +import FlowFees from 0x0000000000000007 + +/// Test-only: directly calls FlowFees.deductTransactionFee +/// the same way the FVM does after executing a transaction +transaction(inclusionEffort: UFix64, executionEffort: UFix64) { + prepare(payer: auth(BorrowValue) &Account) { + FlowFees.deductTransactionFee(payer, inclusionEffort: inclusionEffort, executionEffort: executionEffort) + } +} diff --git a/transactions/FlowServiceAccount/add_fee_child_accounts.cdc b/transactions/FlowServiceAccount/add_fee_child_accounts.cdc index badfa0039..c00ed1537 100644 --- a/transactions/FlowServiceAccount/add_fee_child_accounts.cdc +++ b/transactions/FlowServiceAccount/add_fee_child_accounts.cdc @@ -1,19 +1,14 @@ -transaction(accounts: Int) { - prepare(admin: auth(Storage, BorrowValue, UpdateContract) &Account) { - let feeChildAccounts: [Capability] = - admin.storage.load<[Capability]>(from: /storage/ChildFeeAccounts) ?? [] - - var i = 0 - while i < accounts { - i = i + 1 - let acc = Account(payer: admin) - let cap = acc.capabilities - .account - .issue() +import "FlowFees" - feeChildAccounts.append(cap) - } +/// Creates the given number of new child fee accounts, paid for by the +/// signer, and registers them in FlowFees as accounts that may receive +/// transaction fee deposits. +/// Must be signed by the account which holds the FlowFees Administrator. +transaction(accounts: Int) { + prepare(admin: auth(BorrowValue) &Account) { + let flowFeesAdmin = admin.storage.borrow<&FlowFees.Administrator>(from: /storage/flowFeesAdmin) + ?? panic("Could not borrow a reference to the FlowFees Administrator from /storage/flowFeesAdmin") - admin.storage.save<[Capability]>(feeChildAccounts, to: /storage/ChildFeeAccounts) + flowFeesAdmin.createChildFeeAccounts(count: accounts, payer: admin) } } diff --git a/transactions/FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc b/transactions/FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc new file mode 100644 index 000000000..a37c9cebd --- /dev/null +++ b/transactions/FlowServiceAccount/scripts/get_fee_receiver_addresses.cdc @@ -0,0 +1,12 @@ +import "FlowFees" + +// Returns the addresses of all accounts that may receive transaction +// fee deposits, i.e. the possible `to` addresses of the deposit events +// emitted when fees are collected: the FlowFees account plus any +// child fee accounts. +// Note that fees received by the FlowFees account itself are held in +// the FlowFees contract's internal vault, not in the account's default +// FLOW vault, so they are not reflected in that account's balance. +access(all) fun main(): [Address] { + return FlowFees.getFeeReceiverAddresses() +} From 36380dc92a1f1cc53bcb6246384920f59533e8e2 Mon Sep 17 00:00:00 2001 From: Janez Podhostnik Date: Fri, 24 Jul 2026 18:29:22 +0200 Subject: [PATCH 2/2] apply review comment --- contracts/FlowFees.cdc | 12 ++++-------- lib/go/contracts/internal/assets/assets.go | 6 +++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/contracts/FlowFees.cdc b/contracts/FlowFees.cdc index 968b6328d..7aba3bcbc 100644 --- a/contracts/FlowFees.cdc +++ b/contracts/FlowFees.cdc @@ -66,15 +66,11 @@ access(all) contract FlowFees { /// the contract's internal vault, not in the account's default FLOW /// vault, so they are not reflected in that account's balance. /// Use getFeeBalance() to get the total balance of all collected fees. - access(all) view fun getFeeReceiverAddresses(): [Address] { - var addresses: [Address] = [self.account.address] + access(all) fun getFeeReceiverAddresses(): [Address] { + let addresses: [Address] = [self.account.address] if let childFeeAccounts = self.borrowChildFeeAccounts() { - var i = 0 - while i < childFeeAccounts.length { - // concat is used because mutating functions - // like append cannot be called in view functions - addresses = addresses.concat([childFeeAccounts[i].address]) - i = i + 1 + for childFeeAccount in childFeeAccounts { + addresses.append(childFeeAccount.address) } } return addresses diff --git a/lib/go/contracts/internal/assets/assets.go b/lib/go/contracts/internal/assets/assets.go index 49e2a8a24..89e31b1d3 100644 --- a/lib/go/contracts/internal/assets/assets.go +++ b/lib/go/contracts/internal/assets/assets.go @@ -2,7 +2,7 @@ // sources: // Crypto.cdc (4.588kB) // FlowExecutionParameters.cdc (1.073kB) -// FlowFees.cdc (17.079kB) +// FlowFees.cdc (16.887kB) // FlowIDTableStaking.cdc (109.837kB) // FlowServiceAccount.cdc (8.339kB) // FlowStakingCollection.cdc (62.869kB) @@ -129,7 +129,7 @@ func flowexecutionparametersCdc() (*asset, error) { return a, nil } -var _flowfeesCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x3b\x5d\x73\x1b\x39\x72\xef\xfa\x15\xbd\xae\x8a\x8f\xbc\xa5\x29\xe7\xa3\xf2\xa0\x48\xf6\x69\x75\x56\xca\x95\x5c\x6e\xcb\x67\xfb\x1e\x1c\x97\x0d\xce\xf4\x90\x28\x0f\x01\x06\xc0\x48\xe2\xed\xea\xbf\xa7\xf0\x39\xf8\x1a\x8a\xb2\xbd\xa9\xca\xf1\x41\x22\x67\x80\x46\xa3\xbf\xbb\xd1\xa0\xdb\x1d\x17\x0a\x9e\x5c\x0f\x6c\x4d\x57\x3d\xbe\xe5\x5f\x90\x3d\x39\x09\x8f\x7b\x7e\x5b\x79\xf4\x17\xc5\x05\x59\xe3\x35\xa2\x7c\x72\x72\x42\x9a\x06\xa5\x9c\x91\xbe\x9f\x43\xc3\x99\x12\xa4\x51\xa0\x87\xe9\xf7\xf0\xcb\xc9\x09\x00\xc0\xe9\x29\xbc\xba\x41\xa6\x40\x6d\x88\x02\x2a\x01\xb7\x54\x29\x6c\xe1\x76\x83\x0c\x94\x5e\x43\x02\x11\x08\x2d\xee\xb8\xa4\xfa\x8d\xe2\xa0\x36\x08\x1d\x22\xdc\x90\xa1\x57\x06\x4e\xbc\x18\x1a\x80\x06\x3f\xf9\x47\x3f\x6d\x46\xb6\x7c\x60\xea\x0c\xde\x5d\xd3\xbb\x7f\xfd\x97\xf9\x23\x97\xbf\xa5\x6a\xd3\x0a\x72\xcb\xa0\x13\x7c\xfb\x08\x04\xfe\xea\x27\x7e\x0d\x02\x9d\xa6\x94\xdd\x7d\x3b\x34\x0a\xdb\x89\xa5\x34\x45\xff\xe8\x86\x64\xeb\x2c\x80\xb2\xa6\x1f\x24\xe5\xec\x55\xd7\x71\x11\xbd\xc0\x3b\x6c\x06\x55\xbc\x38\x16\x33\xd8\x11\x41\xb6\xa8\x50\x48\x68\x36\x84\xad\x71\x1a\xbb\x9f\xc3\xd0\x2b\x33\xb2\x9d\xc9\x41\xac\xf1\x9a\x34\x8a\x8b\x49\x54\xaf\xb8\x9c\x46\x37\x7e\x79\x1c\x37\x37\x08\x3d\x95\x0a\x78\x07\xcd\x86\xf6\xad\xd9\x04\x69\x1a\x4d\x2e\xbf\x05\xb9\xf4\x90\xae\x38\x53\x84\x32\x69\x79\x3d\xf4\x3d\x30\xbc\x9d\x06\x00\xa4\x6d\x05\x4a\x89\xd2\x03\x98\xe9\x89\x41\xde\xfd\x30\xaa\x24\xf6\x9d\x46\x8e\x71\x65\x37\xdc\x62\x3b\x9f\x20\xdd\x95\x5e\xe6\x1a\xf1\xd2\x61\xe9\xa9\x17\x16\x3b\x83\x0f\x97\xf6\xfb\xc7\x91\x08\x3f\x0b\x7a\x43\x94\x93\x4e\x23\xba\xb0\x1b\x56\x3d\x6d\xbc\x16\x41\x37\xb0\x46\x93\x32\x5e\x56\xe3\x35\x87\x1b\x22\xec\xbc\x33\xf8\x43\x50\xf3\xe5\x7b\x23\xe7\x05\x92\xdd\xc0\x3c\xc8\x99\xd6\x8b\x33\xf8\xc3\x2f\x89\xc9\xb0\x13\xef\xe7\xf0\x8b\x99\xab\x3f\x3d\x2a\xab\x43\xe7\xcf\xec\x7f\x22\x7f\x28\x97\x8a\x47\xaf\x48\x4f\x58\x83\x70\x61\xc6\x2f\xdd\xcf\x30\x44\xe3\xbd\x34\x28\x2f\x53\x5c\xce\x9f\xe9\xff\xf3\x30\x50\x4b\xc3\xa4\x59\x70\x50\xed\xe8\x7b\x4f\xca\x53\xf8\x77\x54\x46\x02\x3c\x12\xbc\x33\x3f\x0d\x4f\xdf\x57\xb5\x5f\x13\x65\x8d\xea\x1a\xf1\x27\x3b\x67\x36\xf7\x72\x9a\x91\xa1\xc9\xb8\x0b\x17\x76\x33\x2b\x2e\x04\xbf\xcd\x79\x3f\x73\x0c\x76\x4c\xee\x48\xdf\xaf\x48\xf3\x05\x28\x83\x86\x48\x04\xc6\x9d\x54\x06\x91\xbe\x45\x81\xd0\x08\x24\x5a\x07\xf6\x38\x52\x95\x76\x95\xb5\x2f\x80\xd1\x1e\x7e\xfd\xb5\x78\xf5\xc3\xb2\x47\xb6\x56\x1b\x3d\xe4\x79\xb4\x05\xfd\x11\xa8\x06\xc1\x62\x1e\xe4\xec\xb9\x1f\xb1\xd6\xb2\xa5\xb8\x22\xbd\xa1\xde\x05\x3c\x5f\x3e\x0f\xef\xe2\xe7\xe3\xf7\x1f\x6b\x90\xc3\x9c\x8e\x0b\xad\x82\x0e\xcf\x37\xd8\x19\x5a\xe4\xd8\xa7\x18\xd3\xce\x4a\x60\x18\xa0\xc5\x2a\x86\xe1\xa8\x3f\x9b\x67\x3b\x3d\x84\xe4\x08\x60\x49\x6e\x08\xed\xc9\xaa\xf7\xcc\x8f\x61\xdc\xd7\x88\xe2\x28\x18\xc0\xe5\x02\xf8\x93\x41\x47\x1e\x36\x5f\xd0\x90\x1d\x59\xd1\x9e\x2a\x8a\xd2\xaa\x95\xb4\xce\x78\x19\x00\xbd\x31\x0b\x49\xc3\x65\xda\x8d\xe2\x92\x58\x41\x23\x32\xa4\x6d\xad\xc0\x2c\x2b\xf6\x81\xe2\xad\x11\xf1\x29\x21\x3d\x83\xa7\x1f\xae\x3c\x36\xfb\x73\x32\xa8\xcd\xcc\x05\x06\x0b\x63\x54\x75\x1c\x20\x17\xf0\x1f\xb8\x97\x0b\x78\xcd\x56\xfc\x6e\x01\x57\x11\xfa\x73\x78\xea\xa0\xbd\xf8\xf8\x32\x62\x42\x2c\x6a\x0e\xdf\xa5\xdf\xa4\x45\xe6\xfc\x3b\xae\xfc\xc2\x19\x91\x53\xb7\xc4\x69\xbe\xd3\xc2\x52\x78\xfa\x6a\x46\x05\xfb\xac\xb9\x45\xfa\x7e\x24\xb0\x71\x4d\x5b\xb2\x07\x81\x0d\xd2\x1b\x04\x25\x08\x93\x64\xb4\xc6\x1a\x94\x66\x89\xb3\x65\x72\x01\x74\x89\x4b\x03\x75\xc7\xa5\xd4\xa6\x15\x3e\x2b\xfe\x39\x5d\x43\xbf\xf6\xc6\xdd\xb8\x0e\x19\x80\xd5\x23\x8a\x86\xf7\x3d\xea\x78\xe1\x0c\xaa\x7e\x6a\xd7\x0f\x12\x08\xdb\x07\x30\xa5\xb0\x8c\xa2\xf5\x5f\x5c\xa1\xdd\x99\x81\xef\xb6\xd6\xc2\x6a\x5f\x07\xee\x9c\xa0\xc6\x63\x83\x7d\x0b\x74\xdc\xba\x1e\xef\xa3\xc5\xdf\x49\xa0\x4c\xa1\x60\xa4\xb7\x3e\x69\xe1\x9c\xa6\xa5\xb1\x05\xf6\x3b\x09\x2d\x76\xc6\xd3\x5d\xff\xe7\x9f\xff\x1a\x00\xb9\x09\xd2\x44\x8b\x7b\xb3\x96\x9e\x2c\xb0\xb3\xfb\xb6\x60\x88\x8a\xe0\x38\x03\x33\xee\xeb\x9d\xc4\xdc\x94\xeb\xf0\x73\xed\x7c\x82\xd1\xd9\xd8\x33\x68\x4e\x07\xc2\x1a\x5a\x2c\x0b\xf7\x10\x14\xc8\x02\x7e\x63\x69\x25\x2e\x3d\x37\xb5\x06\x05\x9f\x1e\x89\xbf\x36\x9e\x35\xb7\x0f\x17\xf0\x21\xd1\x09\x37\xe8\xe3\x49\x66\xf2\x1e\xeb\x6d\x32\xfb\xa7\xd7\xa7\xda\x68\x27\x4f\x6f\x37\xb4\x47\xa0\x70\x5e\x80\xf7\x4e\xa3\xb4\xa2\x5a\x98\x38\x6b\x6c\x88\x36\x48\x2d\x27\xd8\x90\x41\x22\x6c\x07\x45\x14\x65\xeb\x10\x9f\xc8\xda\xe4\x9e\x7e\x41\x20\xbb\x1d\xb2\x16\x1a\xc2\x34\x57\x57\x08\x0d\xe9\x7b\xcb\x55\x4f\xe1\x09\x08\xa3\xde\x5c\x8c\xdf\x97\x16\xa3\xd9\x87\x7c\x1b\x1f\xe8\xc7\x40\xd1\x79\x01\x4b\x13\x84\xc2\x8f\xf0\x8f\xc9\x9b\xd8\xce\x67\xd6\x2b\x8d\x12\xef\xcb\x90\x4a\xa0\xe4\x83\x68\x10\x2e\xdb\x2d\x65\x54\x2a\x41\x14\x17\x11\x15\x4f\x4f\x43\x32\x12\x3d\x8b\x5f\x5f\xf6\xbd\x77\x18\x24\x01\xa2\x78\x98\xea\x73\x9b\x89\x6c\x26\xc7\x4a\xcb\xab\x9f\x6a\x23\xa8\x6b\xc1\xb7\xd7\x88\x26\x04\xca\x53\x9b\xa9\x30\xb0\x22\x51\x02\xb7\x84\x32\xca\xd6\x97\x5b\xe7\x8c\x2d\xac\x62\xa0\x5f\x3d\x8c\x8b\x83\x07\xb0\x52\xee\xed\x4c\x1a\x2f\xc0\x79\xb1\x4a\x29\x93\x05\xf8\x3a\xac\x94\xcd\x80\xbd\xc4\x63\x80\x65\xeb\x4f\x08\x8b\x15\x93\x9c\x1e\xf9\x93\x67\x19\xf8\x82\x52\x36\xea\x3f\x7f\x96\x6f\xc1\x4f\x0b\xdc\x4a\xe1\x44\xd1\x25\x4c\xc7\xa7\x01\xe6\xc3\x31\x2a\x7c\x7b\x9c\x0a\xdf\x35\x56\x75\xd0\x72\x82\xbe\xd0\xa2\x54\x19\xaa\x3f\x3b\xc2\x68\x33\x7b\x72\x65\xad\xcc\xa8\x3c\x1b\x04\x81\xff\x33\xa0\xd4\x18\x5b\x7a\x6a\xfb\xaf\x95\xc8\x2a\xd6\x12\xde\x6a\xf5\x0b\x6f\xb4\x6b\xd2\xff\xff\xdb\x51\x7f\x1e\xcd\x8f\xd5\x92\x4a\x58\x1b\x42\x08\xed\x9c\x58\xe4\x66\x8c\x67\x75\xae\x2f\x28\xab\x5c\x3e\x29\x8d\xd2\x7d\x6d\xd7\xa9\x4a\xfc\xe0\xf5\xac\xbe\xef\xd3\x53\x18\x98\x40\xd2\x6c\x74\x24\x5b\x1b\xe1\x08\xf3\x8e\xe1\xdd\xce\x7a\x3b\x67\xe0\xac\xf4\xb9\x75\x7e\xa8\x62\x57\x3c\x8a\x12\xb3\xb2\x5c\xe2\xe8\x55\x4c\x72\xeb\x9d\x3f\xcb\xcc\x56\x65\x0d\xe3\x3a\xad\x80\xbc\x66\x2d\xde\x69\xeb\xf1\x6f\x15\x37\x96\x8c\x29\x3d\x5a\x90\xad\xa7\x4f\x8f\x16\xa2\x5a\xba\x51\xc0\xfd\x10\x2f\xfc\xf1\x50\x02\x02\x99\x3b\x37\x76\x55\x27\x3e\x71\x12\x93\x47\xc5\x26\x10\x4e\xed\xb1\x27\xf3\x1c\x9e\x66\x99\x77\x11\xf7\x76\xfe\xbd\x79\x3d\x85\x14\x38\x93\x91\xa7\x3f\x29\x62\x45\x72\x34\x09\xeb\x28\x93\x9f\x51\xa5\x58\xfb\x18\xc3\x9f\x48\x41\xbe\xe0\xa1\x64\x2e\xf9\x4c\xba\x82\x83\xe0\x0f\xb9\x85\x04\xfa\xe4\x9b\x6f\x74\x17\xf1\xa7\x5e\x41\x49\xc5\xec\x41\x1f\x52\xaa\x69\x1d\xff\xf2\x49\xa6\x9f\xc9\xcf\x32\xbe\xca\x3d\xc4\xb1\xea\xf8\xff\xce\x9e\xdf\xe7\x3b\x3d\xda\x8e\x1f\xb6\xe1\x5f\x67\xbf\x33\xc2\x3f\xda\x6e\x4f\xd9\xec\xfb\xb8\xb2\x75\x38\x80\xb5\x65\x5a\x93\x69\x79\xca\x45\x75\x68\xa2\x80\xc7\x7a\x9a\xc7\xb0\xd2\xe4\x5c\x63\x35\xfa\x3b\x97\xa1\x33\x2e\x68\x83\xc8\xf0\x76\x5c\x4e\x07\x50\xd3\xcb\x47\x3f\x26\x70\xa8\x3c\x9c\x40\xa8\xf2\x30\x65\x45\x08\xe4\x0a\x92\x24\x18\xcf\xbf\x81\x47\x9e\x3f\x66\x5f\xd0\x99\x8d\x3d\xc0\x99\xbf\x8c\x24\x98\x7d\x82\x0a\x73\x6a\x24\xe6\x7d\x9b\x92\xd8\x6f\x6d\x9d\x6f\x6d\xfe\xdb\xb2\x27\x41\x64\x79\x3c\xb3\xd2\x79\xbf\x39\xeb\xae\x8c\x41\xb2\xbc\x5b\xd3\x1b\x64\xc0\x86\xed\x0a\x85\xb6\x67\x0c\x6f\x2b\x95\x9e\x05\xec\x08\x6d\xa1\x8b\xf8\xa7\x01\xad\xf6\xf0\x79\x47\xf6\x28\x3e\x2f\x80\xb0\x56\x27\xb7\x06\xea\xd6\x9f\xd1\xf9\x7a\x65\x51\xfd\x4a\xc0\x54\x2a\x61\x49\x05\x6c\x99\x8c\xd6\x76\x58\x63\x19\x60\x6e\xc8\x8d\x49\x2a\xbe\xe0\x5e\x5a\x34\x04\x02\x67\xfd\xde\xc9\x98\xa9\x98\xa9\x8d\xe0\xc3\x7a\x93\x40\x8a\x8a\x48\x69\xfd\x54\x87\x3e\xbe\x40\x54\x56\xaf\x16\x09\x90\xb8\xbe\xd4\x0d\x7d\xbf\xb7\xd5\x2b\x6e\x8a\x11\x79\xfd\xcb\x17\xb6\x96\x93\x6a\x60\xb3\xa0\x22\xad\x6a\xac\x4d\x7d\xcd\x94\x66\xc5\x1e\xc5\x19\x98\xa8\xce\x16\x87\xdf\x93\x7e\x40\xf8\x15\x5c\xb1\x73\x2c\x63\xe6\xda\xb2\x13\xb5\x18\xa5\xf1\x2e\xf3\xac\xea\xbd\x9f\x04\x79\xab\x23\x77\x66\x59\x12\x44\xa8\x52\x55\xd6\x36\xc1\xcc\x85\xed\x20\x4d\xb5\xc6\x70\x96\xde\xe0\x93\x43\xfe\xe5\xa1\x1c\x34\xaf\x02\xf7\x9c\xb4\xe7\xff\x97\x25\x60\x78\xf9\x12\x3e\x7c\x9c\x40\xfa\x72\xa2\x58\xf7\x31\x19\xde\x71\x01\x78\x47\xa5\xa2\x6c\x9d\xc1\xaf\x9d\x66\xd4\xd8\x97\x2c\xb6\xb4\x85\xb1\xd9\x04\x4c\x5f\xcb\x3a\xe8\xd7\x1f\x2c\xf5\x4d\xc4\xd2\xf5\x6a\x18\x8c\xa6\x76\xcc\x81\xdc\xb7\x99\x13\x66\xf3\xaf\x0c\x1e\x0d\x2d\xc9\x0e\x2e\xa2\xc9\xcb\x58\x55\x83\x08\x50\x29\x07\xfc\x36\x7e\xe7\xb5\x8b\x40\xdb\xb8\xa8\xe9\xa8\xdb\x90\x5d\x89\x6d\x9d\x11\x0d\xd9\x1d\x45\xf4\x49\xa9\x96\xe4\x06\x67\x39\x22\x0b\x50\xfc\xe0\xe1\x44\x19\xa8\x1d\x71\x96\x9c\xee\x60\x9e\x95\x31\xa3\xb3\x8e\x4b\x90\x4a\x0c\x8d\x82\x0d\xef\x5b\xca\xd6\xb5\x58\x8c\x21\xb6\x36\x1a\x6e\x48\xdf\x0c\x3d\x51\x21\x24\x90\x45\xd9\xd3\x81\x4b\xdc\x59\x52\xf4\xb4\x86\x3f\x0e\x25\x42\xf5\x58\x71\xd8\x92\x2f\x85\xff\x90\x20\x50\xee\x38\x33\x03\x36\x74\xbd\x01\x6d\x1f\x24\x70\x6b\xd6\x19\xaa\x5b\x2e\xbe\x54\x2d\xb1\x56\x80\x4a\xf0\x51\xa0\x63\xb2\x80\x86\x5b\x27\xc7\x19\xc2\xc0\xa8\xf9\x1e\x7c\x3f\xa0\x71\xe2\x36\x7d\xb8\x7e\xff\x27\x8d\xb4\x45\xcb\xfa\x25\xad\xfe\x66\xb7\x9a\x88\xc5\xac\x49\xe4\x0e\x44\xa8\xc7\x23\x19\x02\x8d\x47\x21\x59\xcc\x9a\x44\xf2\x40\xa4\x3c\x8a\x27\x65\x54\x7d\xe7\x28\x3c\x35\x4c\xe6\x8c\x23\x5a\x00\x2e\x62\xd6\x96\x43\x2b\xcb\x6a\xb3\x56\x3e\x2d\xa7\x56\x90\x82\x8b\x1a\xaa\x53\x8a\x05\xef\x51\xd0\x6e\xff\xb3\xb6\x86\xae\xe4\xf0\x06\xa5\x4e\xc8\x0c\x47\x74\xf2\x34\x46\x15\x37\xe3\x58\xe9\x06\x5f\x73\xf1\x76\x54\x82\x57\x81\x53\xb5\x76\x8f\x58\xed\x26\x97\x4d\x8e\x1d\xde\x8a\x01\x75\x0a\x6a\x8e\x22\xf5\x58\xd8\x10\x09\x72\xe8\x3a\xda\x50\x64\x63\xa3\x86\x96\x17\x93\xe8\x46\x0a\x39\x8a\x8d\x36\x08\x9c\x29\xca\x86\x7a\x9e\x66\x8d\xbe\xc3\x1e\xa3\xfd\x9c\xc1\x4f\x9c\xf7\x09\x46\x1b\x04\x9d\x7b\x6c\x87\xad\xc3\xc8\xa3\xa0\xb3\x71\xaa\x83\xb8\xa3\x71\x59\xa6\x80\xa9\x84\x1b\x13\x56\x51\x73\xbe\x48\x1d\xe1\x8f\x27\x7a\x5d\x2f\xf4\xe6\x3c\x6e\x6e\x7e\x45\x71\xed\xc6\xc8\x9d\xd9\x58\x61\xd6\x66\xa3\x9d\xe8\x6c\xff\xc1\xb8\x21\xfd\x60\x5e\x6c\xb8\x21\x4c\x4b\xf0\x10\x87\xef\x30\xa3\xee\x68\xda\x17\xb9\x0a\xd5\xf6\x16\x76\x3e\xb9\x15\x87\x63\xb4\x7f\xed\xc2\x26\xb4\xfc\x00\x53\x17\x53\x44\x59\xc0\x03\x6b\xd4\xb4\xbd\xba\x10\x5c\xd4\xa5\xaa\x9c\x9e\xa1\x62\x8a\x6a\xc9\x93\x72\x4a\x1d\x47\xb8\x98\x40\x3e\xcf\xcc\x46\x03\xf0\x08\xa5\xa6\xd2\x9f\x79\xfa\x34\xe3\xfd\x9f\x60\x85\x1d\x17\x81\x93\x6c\x0d\x24\x16\x84\xd0\xdc\xf6\x5a\xd9\x95\x28\xba\x9c\x2c\x97\x18\xa3\x4d\xe3\x91\xb8\x5e\xcc\xb8\x50\x64\x3a\x8d\x8a\xf5\xa6\xae\x59\x0b\xbf\x92\x4e\xc8\x44\xd4\x19\xe1\xa5\x3a\xf4\x32\xe4\xe2\x1d\x70\x9c\xe9\x40\x48\xd8\xe8\xc2\xa6\x93\xb9\x7f\x34\xc0\x3d\xc0\x42\x78\x5d\x57\x44\x04\x7f\xee\x61\x9f\x44\x6a\x96\x73\x3b\xda\xb1\xd7\x7b\xe2\x50\x77\x96\xc6\xe7\x8c\x7e\xe4\x8f\x1e\xdc\xd7\xab\x2c\x98\xb4\xf8\xae\xd8\xc4\xbc\xec\x1f\xd0\x59\xe2\xf1\x52\x32\x0b\xa2\xf6\xc9\xf2\xf4\xb2\x69\x54\x99\x3c\x8e\x61\xf0\x22\xd2\xd9\x7a\xdf\x68\x18\xb0\x25\x77\xaf\xea\x2d\xa4\x66\xc8\xfc\xec\x48\xbf\xe2\x5b\xec\x3c\xf5\x5c\xec\x36\x6d\xc0\x47\xd3\xaa\xc3\x8c\x2d\xb9\x4b\xd5\xcb\x37\x36\x34\x7c\xbb\x1b\x94\x69\x47\x9e\x15\x9b\xc9\x1e\x54\xba\x61\xcb\xed\xa5\x0d\x78\x01\x6d\x27\x16\x01\xe3\x5c\x77\x0e\xee\xc0\x58\x51\x0b\xe1\x4d\x61\x77\xb2\xa6\xea\xa5\x6b\x74\x31\x25\xd7\x37\x28\x51\xdc\x84\xd1\xb3\xc0\xdd\x31\xdb\x18\x59\xd9\x4d\xae\x71\xe1\x58\x36\x7b\x9e\x17\x0b\xb4\x99\xe8\x42\x69\xdc\xec\x2c\xd2\x8d\xbf\xa1\xe0\x3a\x71\x55\x80\x44\xf4\xfb\x65\xad\xce\x3b\xc5\xfe\x59\x99\x3a\xd5\x5d\x83\x12\x03\x2e\x2a\x27\x7f\x99\xab\xa8\xef\xad\x9c\x38\xe5\x49\x0a\x09\x4a\x66\x4e\xd4\xd1\xa6\x3a\x43\x0d\x1f\xc6\x9e\x24\x5b\xaf\x8f\xe7\xbd\xb6\xf9\x07\xb6\x6b\xb4\x07\xe2\xb7\x1b\x14\x18\x45\x55\x2d\x47\xc9\x94\xad\x6b\x11\xdf\xc7\xa4\x04\x92\x74\x3d\x22\xe1\x79\xaa\x09\x63\xa3\x6c\x7c\x52\xe6\xce\x0b\x55\x38\xc3\x83\x8b\xd1\x14\x14\x1d\x74\xdf\x76\x1c\x38\x62\x30\x2e\x77\xa8\x23\xf4\x51\x82\xe2\x0c\x76\x1e\xd8\xac\xbc\xbb\xc3\x16\xa8\x8a\x79\x10\x89\x6b\x71\x08\x53\x68\x6d\xd2\xfc\xf5\x80\x5c\x7a\xc0\x2f\x2e\x8e\x92\xbd\xaf\x12\xd8\xa3\x85\xb5\x68\x44\xbc\xb2\x51\x81\xe9\xf7\x4b\xdc\xbf\x26\x84\x1c\x56\xae\x1f\x50\x71\x77\xad\xc0\x67\xe5\x01\x40\x68\x0a\xba\x1c\xd4\xc6\xd7\x6c\x4c\x98\x30\xce\xa6\xf5\xc6\x67\x0b\x31\x45\x70\xf6\x49\x0f\x3b\xec\x75\x1e\x7f\x4b\x21\x6b\x8d\xeb\x10\xc3\x19\xe8\xf7\xb0\xfe\x38\x69\xfa\x69\x17\x2f\x76\x84\xfd\x14\xe8\xba\x0f\xad\x67\x0b\x74\x5f\x40\xcb\x4d\x4f\xa2\x0f\xa5\x16\xf9\x7c\x53\x5c\xb6\x6a\x3f\x02\x19\x18\x43\x4d\x74\x22\x68\xbf\x0f\xdd\x9d\x51\xd3\x67\xaa\x5c\x35\xb5\x2b\xec\x01\xa9\x98\x82\xef\xda\x36\x90\x20\xf6\xf2\xa5\x3f\x7f\x0c\x45\xaf\x9a\xdc\x9c\xc1\x3b\x66\xf2\x12\xc5\x5d\xb7\x31\x08\xec\x50\xa0\x56\x3d\x17\x12\x7a\x33\x6b\x76\x63\x6d\xe5\x93\xf9\xc9\x04\xb3\x5e\x54\xac\x52\x85\x69\xee\x4c\x76\x50\x83\x31\xcb\x3a\xce\xe6\xad\x36\x2a\x6a\x03\xb7\xd4\x5c\x04\xb9\xd1\xa9\xa6\x76\x8c\xa4\xd9\x60\x5b\xf0\x8d\x48\x6f\x82\x6c\x87\xa9\x40\x18\x58\x8b\xa1\x0b\x25\x58\x1f\x8f\x84\x05\xcb\x9d\xd1\x57\x1b\xa4\x22\x56\x5c\x19\x2e\x8a\x00\xd5\x3a\xed\x7a\x4c\xf3\xec\x25\x6a\x03\x74\x88\x5c\x0d\x42\x20\x53\xfd\xde\xee\xc3\xdd\x3a\xf1\x55\xb3\x8e\xd0\xbe\x88\xfc\x67\x44\x86\xfb\x33\xd6\xf9\xbb\x42\x90\x29\xa9\x7b\x2f\x37\x15\x0b\xf7\x7c\x4d\x9b\x79\x41\x90\x9f\x06\x15\x97\xeb\x84\xe6\x36\xd6\xbc\xe7\x8d\xe3\xa6\xf6\x60\x0b\x5f\x6c\xb0\x0f\x37\x44\x42\x8f\x52\x46\x09\xab\x9f\x3c\x1e\xad\x57\x93\x09\xff\x89\x6d\xc4\x71\xfe\xc9\xf5\xee\xbc\xf7\x2d\x75\xd1\xac\xa2\x15\x22\x40\x8f\x6c\x85\xb3\x44\x86\x5b\x5a\xce\xff\xcc\x4c\x15\x36\x9c\xeb\x9c\x3f\x0b\xe0\xd3\xe0\xf2\xad\xab\xa7\xfa\xd2\x69\xe4\xec\x04\x36\x9c\xd9\xc2\x0d\xb6\x30\x48\x5f\x7e\x6d\x89\x22\xde\x74\x53\xe9\x2e\x10\xe9\x0c\xc9\xdd\x57\xf9\x39\x39\x26\x37\xb4\xef\x79\xf3\x65\xbc\x1c\x65\x67\x6c\x4c\xdd\xda\x5d\x35\x03\x5f\x3c\xae\xde\x30\x0b\x3b\xae\x98\xef\xaf\xb0\xb0\x90\xba\x31\x5b\xef\xdd\xed\x7a\x8a\x6d\xb8\xca\xd4\xf7\xb0\xe6\x5a\x3e\x38\xc3\xda\x25\xac\x3c\x65\x6c\xac\x02\x1c\x3e\x9e\xf2\x44\xf2\x83\x13\x97\xc9\x5a\xbc\x1b\x3b\xc2\x69\x66\xd1\xd3\x4e\xc6\x45\x28\x70\x5b\x54\x57\x51\x9f\xbd\x3f\x4e\x1c\x2f\xb4\xc4\x0e\xd4\x5e\xae\x30\x27\x80\xd3\xd2\xf2\x29\xdc\xcc\x3a\xea\x96\xd5\xdf\xc1\xf5\xa2\x03\x77\xbb\x6e\x4a\xbf\xf2\x80\xc3\xbb\xf3\xcd\x45\x6b\x8c\x3d\x8d\x79\x1a\xb5\x06\x98\x36\xb6\xb4\x1b\xe9\x35\x53\x33\x3f\xfd\x1f\xe0\xdd\x6b\xa6\xfe\xf9\x9f\x8a\x23\x19\xbf\x8f\x79\x1a\x2b\x7c\xaf\xf6\x3f\x07\xca\x1d\x96\x8b\xb4\xb1\x2e\x39\x13\xf3\xa1\x7c\x26\x24\xfe\xa6\xc1\xfd\x8b\xd9\xa9\xbd\x0e\x38\x3a\x69\xff\xae\xd6\xde\xe7\x57\x3c\x86\x03\x15\x2e\x40\xda\x10\x0f\x07\x85\xcc\xea\x16\x95\x40\x60\x27\xf8\xaa\xc7\xad\xf3\xfc\xb6\x94\x95\x08\xe0\xc9\xe3\x84\xa4\xd2\x6b\x9f\x5d\xc5\x88\x1b\x45\xce\x26\x8f\xa2\x0e\x5d\x43\x6a\xf8\x6e\x7f\x9e\x4c\x2c\xe2\x22\x13\x37\xdd\x25\x63\xe6\xb5\x80\x28\x47\xe9\x0c\x5e\x09\xc1\x85\x46\xd5\xd4\xf5\xd4\x5d\x76\xde\x66\x4e\x6f\xf6\xe6\xd4\xcd\x04\x4c\x68\x8a\xae\x94\xf4\xf4\x6f\xd8\x42\x47\x85\x54\xbe\x9d\x2b\x25\xc5\x68\x7a\x8a\x7e\x92\x4f\x7a\x8d\x18\x87\x0c\xef\xa4\x8c\x83\xdb\x9d\xda\xfb\x6b\x67\xbe\x10\x79\x2b\xa8\x41\x97\xe1\x6d\x46\x51\xc5\x7d\x0e\x11\x78\x58\x3d\xcf\x7f\x3c\x39\x0f\x03\x35\xc7\xa9\xc9\xb6\x16\xc9\x51\xea\x41\x88\xde\x17\x3e\x70\x9f\x39\x01\xbf\x7c\xb8\x71\x28\x1d\x7f\x7c\xe3\x50\x3a\x6f\xb2\x71\xe8\xfe\x24\xd4\x97\x5d\x56\x54\x0d\x96\xec\x4d\xe1\xd8\x11\xe6\xdd\x75\xce\x4f\xda\xa6\xa1\x0c\x4d\xf3\x36\x43\x61\x5a\xe3\x0e\x66\x67\x0f\xa5\x7e\x13\xd7\x69\x0d\xa6\xc1\xcb\x55\x9a\xbf\xb2\xfc\x67\xbc\xcb\x69\x67\x26\xa7\x84\xbf\x87\x59\xb1\xc3\xdf\xfb\x81\xb5\x33\xc2\x1f\x73\x74\xc7\xe1\xb5\x73\xc1\x79\x6e\x50\xaa\x17\x40\xcd\xb9\x49\xa6\x67\xb6\x7d\x0b\x88\xd5\x29\x6f\xc1\xed\x65\x64\xc3\x04\x2d\xe1\x40\x4d\xfb\x88\x13\xea\x8a\xa9\xf4\x17\x44\xac\x6f\xb0\x5e\xfc\x95\xd6\x60\x7b\xa3\xc7\x8c\x79\xbb\xdf\xe1\x19\xe8\xbf\xe7\xf9\x05\xed\x17\xb3\xf9\xbc\x7e\x73\x3b\xf5\xa3\xed\x96\x9a\x7e\x4f\xd7\xfe\x93\x5c\x6a\x9a\x1d\xa3\xa9\xe7\xcf\x0c\x8c\xac\xdf\xa1\x73\x66\xd2\xc0\xf3\x42\x7e\x7f\xf2\xbf\x01\x00\x00\xff\xff\x62\xfe\x81\x8f\xb7\x42\x00\x00" +var _flowfeesCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x3b\x5d\x73\x1b\x39\x72\xef\xfa\x15\xbd\xae\x8a\x8f\xbc\xa5\x29\xe7\xa3\xf2\xa0\x48\xf6\x69\x75\x56\xca\x95\x5c\x6e\xcb\x67\xfb\x1e\x1c\x97\x0d\xce\xf4\x90\x28\x0f\x01\x06\xc0\x48\xe2\xed\xea\xbf\xa7\xf0\x39\xf8\x1a\x8a\xb2\xbd\xa9\xca\xf1\x41\x22\x67\x80\x46\xa3\xbf\xbb\xd1\xa0\xdb\x1d\x17\x0a\x9e\x5c\x0f\x6c\x4d\x57\x3d\xbe\xe5\x5f\x90\x3d\x39\x09\x8f\x7b\x7e\x5b\x79\xf4\x17\xc5\x05\x59\xe3\x35\xa2\x7c\x72\x72\x42\x9a\x06\xa5\x9c\x91\xbe\x9f\x43\xc3\x99\x12\xa4\x51\xa0\x87\xe9\xf7\xf0\xcb\xc9\x09\x00\xc0\xe9\x29\xbc\xba\x41\xa6\x40\x6d\x88\x02\x2a\x01\xb7\x54\x29\x6c\xe1\x76\x83\x0c\x94\x5e\x43\x02\x11\x08\x2d\xee\xb8\xa4\xfa\x8d\xe2\xa0\x36\x08\x1d\x22\xdc\x90\xa1\x57\x06\x4e\xbc\x18\x1a\x80\x06\x3f\xf9\x47\x3f\x6d\x46\xb6\x7c\x60\xea\x0c\xde\x5d\xd3\xbb\x7f\xfd\x97\xf9\x23\x97\xbf\xa5\x6a\xd3\x0a\x72\xcb\xa0\x13\x7c\xfb\x08\x04\xfe\xea\x27\x7e\x0d\x02\x9d\xa6\x94\xdd\x7d\x3b\x34\x0a\xdb\x89\xa5\x34\x45\xff\xe8\x86\x64\xeb\x2c\x80\xb2\xa6\x1f\x24\xe5\xec\x55\xd7\x71\x11\xbd\xc0\x3b\x6c\x06\x55\xbc\x38\x16\x33\xd8\x11\x41\xb6\xa8\x50\x48\x68\x36\x84\xad\x71\x1a\xbb\x9f\xc3\xd0\x2b\x33\xb2\x9d\xc9\x41\xac\xf1\x9a\x34\x8a\x8b\x49\x54\xaf\xb8\x9c\x46\x37\x7e\x79\x1c\x37\x37\x08\x3d\x95\x0a\x78\x07\xcd\x86\xf6\xad\xd9\x04\x69\x1a\x4d\x2e\xbf\x05\xb9\xf4\x90\xae\x38\x53\x84\x32\x69\x79\x3d\xf4\x3d\x30\xbc\x9d\x06\x00\xa4\x6d\x05\x4a\x89\xd2\x03\x98\xe9\x89\x41\xde\xfd\x30\xaa\x24\xf6\x9d\x46\x8e\x71\x65\x37\xdc\x62\x3b\x9f\x20\xdd\x95\x5e\xe6\x1a\xf1\xd2\x61\xe9\xa9\x17\x16\x3b\x83\x0f\x97\xf6\xfb\xc7\x91\x08\x3f\x0b\x7a\x43\x94\x93\x4e\x23\xba\xb0\x1b\x56\x3d\x6d\xbc\x16\x41\x37\xb0\x46\x93\x32\x5e\x56\xe3\x35\x87\x1b\x22\xec\xbc\x33\xf8\x43\x50\xf3\xe5\x7b\x23\xe7\x05\x92\xdd\xc0\x3c\xc8\x99\xd6\x8b\x33\xf8\xc3\x2f\x89\xc9\xb0\x13\xef\xe7\xf0\x8b\x99\xab\x3f\x3d\x2a\xab\x43\xe7\xcf\xec\x7f\x22\x7f\x28\x97\x8a\x47\xaf\x48\x4f\x58\x83\x70\x61\xc6\x2f\xdd\xcf\x30\x44\xe3\xbd\x34\x28\x2f\x53\x5c\xce\x9f\xe9\xff\xf3\x30\x50\x4b\xc3\xa4\x59\x70\x50\xed\xe8\x7b\x4f\xca\x53\xf8\x77\x54\x46\x02\x3c\x12\xbc\x33\x3f\x0d\x4f\xdf\x57\xb5\x5f\x13\x65\x8d\xea\x1a\xf1\x27\x3b\x67\x36\xf7\x72\x9a\x91\xa1\xc9\xb8\x0b\x17\x76\x33\x2b\x2e\x04\xbf\xcd\x79\x3f\x73\x0c\x76\x4c\xee\x48\xdf\xaf\x48\xf3\x05\x28\x83\x86\x48\x04\xc6\x9d\x54\x06\x91\xbe\x45\x81\xd0\x08\x24\x5a\x07\xf6\x38\x52\x95\x76\x95\xb5\x2f\x80\xd1\x1e\x7e\xfd\xb5\x78\xf5\xc3\xb2\x47\xb6\x56\x1b\x3d\xe4\x79\xb4\x05\xfd\x11\xa8\x06\xc1\x62\x1e\xe4\xec\xb9\x1f\xb1\xd6\xb2\xa5\xb8\x22\xbd\xa1\xde\x05\x3c\x5f\x3e\x0f\xef\xe2\xe7\xe3\xf7\x1f\x6b\x90\xc3\x9c\x8e\x0b\xad\x82\x0e\xcf\x37\xd8\x19\x5a\xe4\xd8\xa7\x18\xd3\xce\x4a\x60\x18\xa0\xc5\x2a\x86\xe1\xa8\x3f\x9b\x67\x3b\x3d\x84\xe4\x08\x60\x49\x6e\x08\xed\xc9\xaa\xf7\xcc\x8f\x61\xdc\xd7\x88\xe2\x28\x18\xc0\xe5\x02\xf8\x93\x41\x47\x1e\x36\x5f\xd0\x90\x1d\x59\xd1\x9e\x2a\x8a\xd2\xaa\x95\xb4\xce\x78\x19\x00\xbd\x31\x0b\x49\xc3\x65\xda\x8d\xe2\x92\x58\x41\x23\x32\xa4\x6d\xad\xc0\x2c\x2b\xf6\x81\xe2\xad\x11\xf1\x29\x21\x3d\x83\xa7\x1f\xae\x3c\x36\xfb\x73\x32\xa8\xcd\xcc\x05\x06\x0b\x63\x54\x75\x1c\x20\x17\xf0\x1f\xb8\x97\x0b\x78\xcd\x56\xfc\x6e\x01\x57\x11\xfa\x73\x78\xea\xa0\xbd\xf8\xf8\x32\x62\x42\x2c\x6a\x0e\xdf\xa5\xdf\xa4\x45\xe6\xfc\x3b\xae\xfc\xc2\x19\x91\x53\xb7\xc4\x69\xbe\xd3\xc2\x52\x78\xfa\x6a\x46\x05\xfb\xac\xb9\x45\xfa\x7e\x24\xb0\x71\x4d\x5b\xb2\x07\x81\x0d\xd2\x1b\x04\x25\x08\x93\x64\xb4\xc6\x1a\x94\x66\x89\xb3\x65\x72\x01\x74\x89\x4b\x03\x75\xc7\xa5\xd4\xa6\x15\x3e\x2b\xfe\x39\x5d\x43\xbf\xf6\xc6\xdd\xb8\x0e\x19\x80\xd5\x23\x8a\x86\xf7\x3d\xea\x78\xe1\x0c\xaa\x7e\x6a\xd7\x0f\x12\x08\xdb\x07\x30\xa5\xb0\x8c\xa2\xf5\x5f\x5c\xa1\xdd\x99\x81\xef\xb6\xd6\xc2\x6a\x5f\x07\xee\x9c\xa0\xc6\x63\x83\x7d\x0b\x74\xdc\xba\x1e\xef\xa3\xc5\xdf\x49\xa0\x4c\xa1\x60\xa4\xb7\x3e\x69\xe1\x9c\xa6\xa5\xb1\x05\xf6\x3b\x09\x2d\x76\xc6\xd3\x5d\xff\xe7\x9f\xff\x1a\x00\xb9\x09\xd2\x44\x8b\x7b\xb3\x96\x9e\x2c\xb0\xb3\xfb\xb6\x60\x88\x8a\xe0\x38\x03\x33\xee\xeb\x9d\xc4\xdc\x94\xeb\xf0\x73\xed\x7c\x82\xd1\xd9\xd8\x33\x68\x4e\x07\xc2\x1a\x5a\x2c\x0f\xb8\x87\x37\x96\x4c\xe2\xd2\x33\x52\x2b\x4f\x70\xe7\x99\xaf\xa8\x79\x7c\xb8\x80\x0f\x89\x3a\xb8\x41\x1f\x4f\x32\x6b\xf7\x58\x47\x93\x99\x3e\x6d\x67\x33\x10\x35\x4b\x5b\x31\x98\x01\xeb\x25\xd9\xed\x90\xb5\xb3\x6c\x8e\xc7\x78\x9e\xcc\x8c\xed\x64\xa6\xfd\x69\x94\x75\x5f\x86\x24\x02\x25\x1f\x44\x83\x70\xd9\x6e\x29\xa3\x52\x09\xa2\xb8\x88\x50\x3b\x3d\x0d\xc1\x7c\xf4\x2c\x7e\x7d\xd9\xf7\xde\xe0\x92\x04\x88\xe2\x61\xaa\xcf\x0d\x26\xb2\x81\x1a\xd3\xfd\x54\x1b\x81\x5c\x0b\xbe\xbd\x46\x34\x21\x44\x9e\x1a\x4c\x85\x51\x19\x81\xb5\x3b\x15\xb8\x25\x94\x51\xb6\xbe\xdc\x3a\x67\x66\x61\x15\x03\xfd\xea\x61\x5c\xec\x7c\x9d\xa8\x78\x3d\x4d\xfd\x2d\x9c\x17\xab\x94\x8c\x2e\xc0\xd7\x61\xa5\x6c\x06\xec\x25\x1e\x03\x2c\x5b\x7f\x42\x58\xac\x98\xe4\xf4\xc8\x9f\x3c\xcb\xc0\x17\x94\xb2\x51\xf3\xf9\xb3\x7c\x0b\x7e\x5a\xe0\x56\x0a\x27\x8a\xce\x60\x3a\xbe\x0b\x30\x1f\x8e\xf1\xe0\xdb\xe3\x3c\xf8\xae\xb1\x9e\x83\x96\x13\xf4\x85\x16\xa5\xca\x50\xfd\xd9\x11\x46\x9b\xd9\x93\x2b\xc2\xb4\xed\x1d\x95\x67\x83\x20\xf0\x7f\x06\x94\x1a\x63\x4b\x4f\x6d\x3f\xb5\x12\x59\xc5\x5a\xc2\x5b\xad\x7e\xe1\x8d\x36\xed\xfa\xff\x7f\x3b\xea\xcf\xa3\xf9\xb1\x5a\x52\x09\x6b\x43\x08\xa1\x8d\x3b\x8b\xcc\xb4\xf1\x4c\xce\x75\x04\x65\x95\xcb\x27\xf3\x02\xf1\xfb\xda\xae\x53\x95\xf8\xc1\xeb\x59\x7d\xdf\xa7\xa7\x30\x30\x81\xa4\xd9\xe8\x48\xb0\x36\xc2\x11\xe6\x1d\xc3\xbb\x9d\xf5\x16\xce\xc0\x59\xe9\x73\xeb\xfc\x50\xc5\xae\x78\x14\x25\x36\x65\xb9\xc1\xd1\xab\x98\xe4\xd6\x3b\x7f\x96\x99\xad\xca\x1a\x5a\x2b\x9c\xb0\xbd\x66\x2d\xde\x69\xeb\xf1\x6f\xc9\x88\xdb\x0d\xed\x31\x1d\x73\x3e\x2d\x5b\x4f\x9f\x1e\x2d\x44\xb5\x70\xbd\x80\xfb\x21\x5e\xf8\xe3\xa1\x00\x1e\x32\x9f\x68\xec\xaa\x4e\x1c\xe2\x24\x20\x8f\x2a\x4d\x20\x99\xda\x63\x4f\xe6\x39\x3c\xcd\x32\xd7\x22\x6e\xec\xfc\x7b\xf3\x7a\x0a\x29\xf0\x6e\x3e\x4b\x1f\x52\xc4\x8a\xe4\x62\x12\xd6\x51\x26\x3f\xa3\x4a\xb1\xf6\x31\x86\x3f\x91\x82\x7c\xc1\x43\xc9\x50\xf2\x99\x74\x05\x07\xc1\x1f\x72\x0b\x09\xf4\xc9\x37\xdf\xe8\x2e\xe2\x4f\xbd\x02\x91\x8a\xd9\x83\x3e\xa4\x54\xd3\x3a\xfe\xe5\x93\x4c\x3f\x93\x9f\x3f\xc2\x3f\x1e\x52\xef\x47\xd8\xf4\xff\x77\xf6\xfc\x3e\xdf\xe9\xd1\x76\xfc\xb0\x0d\xff\x3a\xfb\x9d\x11\xfe\xd1\x76\x7b\xca\x66\xdf\xc7\x95\xa1\xc3\x01\xac\x2d\x73\x9a\x4c\xc5\x53\x2e\xaa\xe3\x12\x05\x3c\xd6\xd3\x3c\x86\x95\x26\x71\x19\xab\xb9\xdf\xb9\x8c\x9b\x71\x41\x1b\x44\x86\xb7\xe3\x72\x3a\x80\x9a\x5e\x3e\xfa\x31\x81\x43\xe5\xe1\x04\x42\x95\x87\x29\x2b\x42\x20\x57\x90\x24\xc1\x78\xfe\x0d\x3c\xf2\xfc\x31\xfb\x82\xce\x6c\xec\x01\xce\xfc\x65\x24\xc1\xec\x13\x54\x98\x53\x23\x31\xef\xdb\x94\xc4\x7e\x6b\xeb\x7c\x6b\xf3\xdf\x96\x3d\x09\x22\xcb\xe3\x99\x95\xce\xfb\xcd\x59\x77\x65\x0c\x92\xe5\xdd\x9a\xde\x20\x03\x36\x6c\x57\x28\xb4\x3d\x63\x78\x5b\xa9\x94\x2c\x60\x47\x68\xab\xf3\xe8\x04\xd0\x6a\x0f\x9f\x77\x64\x8f\xe2\xf3\x02\x08\x6b\x75\x72\x6b\xa0\x6e\xfd\x19\x97\xaf\xf7\x15\xd5\xa3\x04\x4c\xa5\x92\x94\x54\x90\x96\xc9\x68\x6d\x87\x35\x96\x01\xe6\x86\xdc\x98\xa4\xe2\x0b\xee\xa5\x45\x43\x20\x70\xd6\xef\x9d\x8c\x99\x8a\x93\xda\x08\x3e\xac\x37\x09\xa4\xa8\x08\x93\xd6\x1f\x75\xe8\xe3\x0b\x2c\x65\xf5\x67\x91\x00\x89\xeb\x33\xdd\xd0\xf7\x7b\x5b\xfd\xe1\x7d\x5f\xa9\x1f\xf9\xc2\xd0\x72\x52\x0d\x6c\x16\x54\xa4\x55\x8d\xb5\xa9\xaf\x99\xd2\xac\xd8\xa3\x38\x03\x13\xd5\xd9\xe2\xea\x7b\xd2\x0f\x08\xbf\x82\x2b\x16\x8e\x65\xc0\x5c\x5b\x76\xa2\x16\xa3\x34\xde\x65\x9e\x55\xbd\xf7\x93\x20\x6f\x75\xe4\xce\x2c\x4b\x82\x08\x55\xaa\xb2\xda\x26\x98\xb9\xb0\x1d\xa4\x82\x95\x29\x05\x52\x45\x6f\xf0\xc9\x21\xff\xf2\x50\x0e\x9a\x57\x51\x7b\x4e\xda\xf3\xff\xcb\x12\x2a\xbc\x7c\x09\x1f\x3e\x4e\x20\x7d\x39\x51\xf1\xfa\x58\xd4\xa6\xf0\x8e\x4a\x45\xd9\xfa\xea\xab\x6a\x54\xe9\x62\xbe\x50\x35\x01\x73\xaa\x60\x55\xe4\x4b\x54\xc7\xdb\x95\x1c\x89\xea\xc4\x68\x22\x96\xd6\x73\x68\x11\xad\xc1\x68\x6a\xc7\x1c\xc8\x7d\x9b\x39\x61\x36\xff\xca\xe0\xd1\xd0\x92\xec\xe0\x22\x9a\xbc\x8c\x55\x35\x88\x00\x95\x72\xc0\x6f\xe3\x77\x5e\xbb\x08\xb4\x8d\xc8\x1f\xca\x80\x64\x57\x62\x5b\x67\x44\x43\x76\x47\x11\x7d\x52\xaa\x25\xb9\xc1\xbc\xee\x28\x17\xa0\xf8\xc1\xe2\x7e\x19\xa8\x1d\x71\x16\x9b\xee\x60\x9e\x95\x31\xa3\xb3\x82\x4b\x90\x4a\x0c\x8d\x82\x0d\xef\x5b\xca\xd6\xb5\x58\x8c\x21\xb6\x36\x1a\x6e\x48\xdf\x0c\x3d\x51\x21\x24\x90\x45\xd9\xd3\x81\x4b\xdc\x59\x52\xf4\xb4\x86\x3f\x0e\x25\x74\x6c\x3d\x48\xbb\xc2\x96\x7c\x29\xfc\x87\x04\x81\x72\xc7\x99\x19\xb0\xa1\xeb\x0d\x68\xfb\x20\x81\x5b\xb3\xce\x50\xdd\x72\xf1\xa5\x6a\x89\xb5\x02\x54\x82\x8f\x02\x1d\x93\x05\x34\xdc\x3a\x39\xce\x10\x06\x46\xcd\xf7\xe0\xfb\x01\x8d\x13\xb7\xe9\xc3\xf5\xfb\x3f\x69\xa4\x2d\x5a\xd6\x2f\x69\xf5\x37\xbb\xd5\x44\x2c\x66\x4d\x22\x77\x20\x42\x3d\x1e\xc9\x10\x68\x3c\x0a\xc9\x62\xd6\x24\x92\x07\x22\xe5\x51\x3c\x29\xa3\xea\x3b\x47\xe1\xa9\x61\x32\x07\x05\xd1\x02\x70\x11\xb3\xb6\x1c\x5a\x59\x56\x9b\xb5\xf2\x69\x39\xb5\x82\x14\x5c\xd4\x50\x9d\x52\x2c\x78\x8f\x82\x76\xfb\x9f\xb5\x35\x74\x25\x87\x37\x28\x75\x42\x66\x38\xa2\x93\xa7\x31\xaa\xb8\x19\xc7\x4a\x37\xf8\x9a\x8b\xb7\xa3\x12\xbc\x0a\x9c\xaa\xb5\x4b\xc4\x6a\x37\xb9\x6c\x72\xec\xf0\x56\x0c\xa8\x53\x50\x73\x94\xa7\xc7\xc2\x86\x48\x90\x43\xd7\xd1\x86\x22\x1b\x1b\x1d\xb4\xbc\x98\x44\x37\x52\xc8\x51\x6c\xb4\x41\xe0\x4c\x51\x36\xd4\xf3\x34\x6b\xf4\x1d\xf6\x18\xed\xe7\x0c\x7e\xe2\xbc\x4f\x30\xda\x20\xe8\xdc\x63\x3b\x6c\x1d\x46\x1e\x05\x9d\x8d\x53\x1d\xc4\x1d\x8d\xcb\x32\x05\x4c\x25\xdc\x98\xb0\x8a\x9a\xf3\x39\xea\x08\x7f\x3c\xd1\xeb\x7a\xa1\x37\xe7\x71\x73\xf3\x2b\x8a\x6b\x37\x46\xee\xcc\xc6\x0a\xb3\x36\x1b\xed\x44\x67\xcf\xef\xc7\x0d\xe9\x07\xf3\x62\xc3\x0d\x61\x5a\x82\x87\x38\x7c\x87\x19\x75\x47\xbb\xbe\xc8\x55\xa8\xb6\xb7\xb0\xf3\xc9\xad\x38\x1c\xa3\xfd\x6b\x17\x36\xa1\xe5\x07\x98\xba\x98\x22\xca\x02\x1e\x58\xa3\xa6\xed\xd5\x85\xe0\xa2\x2e\x55\xe5\xf4\x0c\x15\x53\x54\x4b\x9e\x94\x53\xea\x38\xc2\xc5\x04\xf2\x79\x66\x36\x1a\x80\x47\x28\x35\x95\xda\xb1\xc6\x69\xc6\xfb\x3f\xc1\x0a\x3b\x2e\x02\x27\xd9\x1a\x48\x2c\x08\xa1\x39\xec\xb5\xb2\x2b\x51\x74\x39\x59\x2e\x31\x46\x9b\xc6\x23\x65\xbd\x98\x71\xa1\xc8\x74\x1a\x15\xeb\x4d\x5d\xb3\x16\x7e\x25\x9d\x90\x89\xa8\xb3\xc0\x4b\x75\xe8\x05\xc8\xc5\x3b\xe0\x38\xd3\x81\x90\xb0\xd1\x85\x4d\x27\x73\xff\x68\x80\x7b\x80\x85\xf0\xba\xae\x82\x08\xfe\xdc\xc3\x3e\x89\xd4\x2c\xe7\x76\xb4\x63\xaf\xf7\xc4\xa1\xee\x2c\x8d\xcf\x19\xfd\xc8\x1f\x3d\xb8\xaf\x57\x59\x30\x69\xf1\x5d\xb1\x89\x79\xfd\xfc\xfd\x78\x29\x99\x05\x51\xfb\x64\x79\x7a\xd9\x34\xaa\x4c\x1e\xc7\x30\x78\x11\xe9\x6c\xbd\xef\x32\x0c\xd8\x92\xbb\x57\xf5\x16\x4c\x33\x64\x7e\x76\xa4\x5f\xf1\x2d\x6a\x9e\x7a\x2e\x76\x9b\x36\xe0\xa3\x69\xd5\x61\xc6\x96\xdc\xa5\xea\xe5\xbb\x03\x1a\xbe\xdd\x0d\xca\xb4\xf3\xce\x8a\xcd\x64\x0f\x2a\xdd\xa4\xe5\xf6\xd2\x06\xb6\x80\xb6\x13\x8b\x80\x71\xae\x3b\x07\x77\x60\xac\xa8\x85\xf0\xa6\xb0\x3b\x59\x53\xf2\xd2\x35\x8a\x98\x92\xeb\x1b\x94\x28\x6e\xc2\xe8\x59\xe0\xee\x98\x6d\x8c\xac\xec\x26\xd7\xb8\x70\x2c\x9b\x3d\xcf\x8b\x05\xda\x4c\x74\xa1\x34\x6e\x76\x16\xe9\xc6\xdf\x50\x70\x9d\xb8\x2a\x40\x22\xfa\xfd\xb2\x56\xe7\x9d\x62\xff\xac\x4c\x9d\xea\xae\x41\x89\x01\x17\x95\x93\xbf\xcc\x55\xd4\xf7\x56\x4e\x9c\xf2\x24\x85\x04\x25\x33\x27\xea\x68\x53\x9d\x95\x86\x0f\x63\x4f\x8f\xad\xd7\xc7\xf3\x5e\xdb\xfc\x03\xdb\x35\xda\x03\xf1\xdb\x0d\x0a\x8c\xa2\xaa\x96\xa3\x64\xca\xd6\xb5\x88\xef\x03\x52\x02\x49\xba\x1e\x91\xf0\x3c\xd5\x84\xb1\xd1\x34\x3e\x29\x73\xe7\x85\x2a\x9c\xe1\xc1\xc5\x68\x0a\x8a\x0e\xb4\x6f\x3b\x0e\x1c\x31\x18\x97\x3b\xd4\x51\xf9\x28\x41\x71\x06\x3b\x0f\x6c\x56\xde\xdd\x61\x0b\x54\xc5\x3c\x88\xc4\xb5\x38\x84\x29\xb4\x36\x69\x9e\x7a\x40\x2e\x3d\xe0\x17\x17\x47\xc9\xde\x57\x09\xec\xd1\xc2\x5a\x34\xf2\x5d\xd9\xa8\xc0\xf4\xcb\x25\xee\x5f\x13\x42\x0e\x2b\xd7\x4f\xa7\xb8\x6b\xcb\xf7\x59\x79\x00\x10\x9a\x82\x2e\x07\xb5\xf1\x35\x1b\x13\x26\x8c\xb3\x69\xbd\x71\xd8\x42\x4c\x11\x9c\x7d\xd2\xc3\x0e\x7b\x9d\xc7\x77\xf9\x47\x92\xa7\x65\xbf\x43\x0c\x67\xa0\xdf\xc3\xfa\xe3\xa4\xe9\xa7\x5d\xbc\xd8\x11\xf6\x53\xa0\xeb\xde\xb3\x9e\x2d\xd0\x7d\x01\x2d\x37\x3d\x7d\x3e\x94\x5a\xe4\xf3\x4d\x71\xd9\xaa\xfd\x08\x64\x60\x0c\x35\xd1\x89\xa0\xfd\x3e\x74\x47\x46\x4d\x93\xa9\x72\xd5\xd4\xae\xb0\x07\xa4\x62\x0a\xbe\x6b\xdb\x40\x82\xd8\xcb\x97\xfe\xfc\x31\x14\xbd\x6a\x72\x73\x06\xef\x98\xc9\x4b\x14\x77\xdd\xba\x20\xb0\x43\x81\x5a\xf5\x5c\x48\xe8\xcd\xac\xd9\x8d\xb5\x95\x4f\xe6\x27\x13\xcc\x7a\x51\xb1\x4a\x15\xa6\xb9\x33\xd9\x41\x0d\xc6\x2c\xeb\x38\x9b\xb7\xda\xa8\xa8\x0d\xdc\x52\x73\x91\xe2\x46\xa7\x9a\xda\x31\x92\x66\x83\x6d\xc1\x37\x22\xbd\x09\xb2\x1d\x9a\x02\x61\x60\x2d\x86\x2e\x94\x60\x7d\x3c\x12\x16\x2c\x77\x46\x5f\x6d\x90\x8a\x58\x71\x65\xb8\x68\x01\x54\xeb\xb4\xeb\xd1\xcc\xb3\x97\xa8\x0d\xd0\x21\x72\x35\x08\x81\x4c\xf5\x7b\xbb\x0f\x77\x6b\xc3\x57\xcd\x3a\x42\xfb\x22\xf2\x9f\x11\x19\xee\x9f\x58\xe7\xef\x0a\x41\xa6\xa4\xee\xbd\xdc\x54\x2c\xdc\xf3\x35\x6d\xe6\x05\x41\x7e\x1a\x54\x5c\xae\x13\x9a\xdb\x58\xf3\x9e\x37\x8e\x9b\xda\x83\x2d\x7c\xb1\xc1\x3e\xdc\x10\x09\x3d\x4a\x19\x25\xac\x7e\xf2\x78\xb4\x5e\x4d\x26\xfc\x27\xb6\x11\xc7\xf9\x27\xd7\xbb\xf3\xde\xb7\xd4\x45\xb3\x8a\x56\x88\x00\x3d\xb2\x15\xce\x12\x19\x6e\x69\x39\xff\x33\x33\x55\xd8\x70\xae\x73\xfe\x2c\x80\x4f\x83\xcb\xb7\xae\x9e\xea\x4b\xa7\x91\xb3\x13\xd8\x70\x66\x0b\x37\xd8\xc2\x20\x7d\xf9\xb5\x25\x8a\x78\xd3\x4d\xa5\xbb\x80\xa3\x33\x24\x77\xdf\xe3\xe7\xe4\x98\xdc\xd0\xbe\xe7\xcd\x97\xf1\x72\x91\x9d\xb1\x31\x75\x6b\x77\x55\x0b\x7c\xf1\xb8\x7a\x43\x2b\xec\xb8\x62\xbe\xbf\xc2\xc2\x42\xea\xc6\x6c\xbd\x77\xb7\xeb\x29\xb6\xe1\x2a\x50\xdf\xc3\x9a\x6b\xf9\xe0\x0c\x6b\x97\x98\xf2\x94\xb1\xb1\x0a\x70\xf8\x78\xca\x13\xc9\x0f\x4e\x5c\x26\x6b\xf1\x6e\xec\xa8\xa6\x99\x45\x4f\x3b\x19\x17\xa1\xc0\x6d\x51\x5d\x45\x7d\xea\xfe\x38\x71\xbc\x10\x12\x3b\x50\x7b\x39\xc1\x9c\x00\x4e\x4b\xcb\xa7\x70\xb3\xe9\xa8\x5b\x4a\x7f\x07\xd7\x73\x0e\xdc\x8d\xba\x29\xfd\xca\x03\x0e\xef\xce\x37\x17\xad\x31\xf6\x34\xe6\x69\xd4\x1a\x60\xda\xd8\xd2\x6e\xa4\xd7\x4c\xcd\xfc\xf4\x7f\x80\x77\xaf\x99\xfa\xe7\x7f\x2a\x8e\x64\xfc\x3e\xe6\x69\xac\xf0\xbd\xda\xff\x1c\x28\x77\x58\x2e\xd2\xc6\xba\xe4\x4c\xcc\x87\xf2\x99\x90\xf8\x76\xfd\xfb\x17\xb3\x53\x7b\x9d\x6e\x74\xd2\xfe\x5d\xad\xbd\xcf\xaf\x78\x0c\x07\x2a\x5c\x80\xb4\x21\x1e\x0e\x0a\x99\xd5\x2d\x2a\x81\xc0\x4e\xf0\x55\x8f\x5b\xe7\xf9\x6d\x29\x2b\x11\xc0\x93\xc7\x09\x49\xa5\xd7\x3e\xdc\x05\x2a\x1b\x45\xce\x26\x8f\xa2\x0e\x5d\xe3\x69\xf8\x6e\x7f\x9e\x4c\x2c\xe2\x22\x13\x37\xdd\x25\x63\xe6\xb5\x80\x28\x47\xe9\x0c\x5e\x09\xc1\x85\x46\xd5\xd4\xf5\xd4\x5d\x76\xde\x66\x4e\x6f\xf6\xe6\xd4\xcd\x04\x4c\x68\x8a\xae\x94\xf4\xf4\x6f\xd8\x42\x47\x85\x54\xbe\x9d\x2b\x25\xc5\x68\x7a\x8a\x7e\x92\x4f\x7a\x8d\x18\x87\x0c\xef\xa4\x8c\x83\xdb\x9d\xda\xfb\x6b\x5b\xbe\x10\x79\x2b\xa8\x41\x97\xe1\x6d\x46\x51\xc5\x7d\x0e\x11\x78\x58\x3d\xcf\x7f\x3c\x39\x0f\x03\x35\xc7\xa9\xc9\xb6\x16\xc9\x51\xea\x41\x88\xde\x17\x3e\x70\x1f\x38\x01\xbf\x7c\xb8\x71\x28\x1d\x7f\x7c\xe3\x50\x3a\x6f\xb2\x71\xe8\xfe\x24\xd4\x97\x5d\x56\x54\x0d\x96\xec\x4d\xdb\xd8\x11\xe6\xdd\x75\xce\x4f\xda\xa6\xa1\x0c\x4d\xf3\x36\x43\x61\x5a\xe3\x0e\x66\x67\x0f\xa5\x7e\x13\xd7\x51\x0d\xa6\xc1\xcb\x55\x9a\xbf\xb2\xfc\x67\xbc\x0b\x69\x67\x26\xa7\x84\xbf\x87\x59\xb1\xc3\xdf\xfb\x81\xb5\x33\xc2\x1f\x73\x74\xc7\xe1\xb5\x73\xc1\x79\x6e\x50\xaa\x17\x28\xcd\xb9\x49\xa6\x67\xb6\x7d\x0b\x88\xd5\x29\x6f\xc1\xed\x65\x5e\xc3\x04\x2d\xe1\x40\x4d\xfb\x88\x13\xea\x8a\xa9\xf4\x17\x44\xac\x6f\xb0\x5e\xfc\x95\xd6\x60\x7b\xa3\xc7\x8c\x79\xbb\xdf\xe1\x19\xe8\xbf\xe7\xf9\x05\xe7\x17\xb3\xf9\xbc\x7e\xf3\x39\xf5\xa3\xed\x96\x9a\x7e\x4f\xd7\xfe\x93\x5c\x6a\x9a\x1d\xa3\xa9\xe7\xcf\x0c\x8c\xac\xdf\xa1\x73\x66\xd2\xc0\xf3\x42\x7e\x7f\xf2\xbf\x01\x00\x00\xff\xff\x69\x65\x9c\xcd\xf7\x41\x00\x00" func flowfeesCdcBytes() ([]byte, error) { return bindataRead( @@ -145,7 +145,7 @@ func flowfeesCdc() (*asset, error) { } info := bindataFileInfo{name: "FlowFees.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe0, 0x53, 0x38, 0x5f, 0xad, 0x92, 0x92, 0x30, 0x2f, 0x42, 0xac, 0x2a, 0x30, 0x53, 0x13, 0x3e, 0x37, 0x5a, 0x78, 0x4, 0x52, 0x74, 0x9, 0x8a, 0x66, 0xad, 0xec, 0x5f, 0x20, 0xc0, 0x61, 0xc1}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0xe5, 0xf3, 0x2d, 0x74, 0xdd, 0x9d, 0xe5, 0xc2, 0xb1, 0x86, 0x94, 0xaa, 0x96, 0xcc, 0x29, 0xa1, 0x39, 0x47, 0xa8, 0x8a, 0xdf, 0x9, 0xca, 0xe2, 0xed, 0x24, 0x79, 0xbe, 0x8b, 0x69, 0x8e}} return a, nil }