Jacob Evans
cd296b8767
feat: Prune Paths + Fast ABI ( #183 )
...
* Cull paths which cannot improve price
* fixes and rename
* optimizations
* disable ABI optimization for sampler
* fix lint
* use fastabi
* Update to fastabi 0.0.2
* update packages
* Fix NaN case
* update to published packages
* rebased
* Update generated wrappers
2021-04-28 17:16:24 +10:00
Lawrence Forman
dfb7b3de8f
Apply slippage to non-native orders [TKR-39] ( #198 )
...
* `@0x/asset-swapper`: Apply slippage to FQT bridge orders
* review comments
Co-authored-by: Lawrence Forman <me@merklejerk.com >
2021-04-13 19:24:50 -04:00
Lawrence Forman
164a5d44d9
bsc<->development rebase ( #189 )
...
* FQT: Pack Protocol/source name into source ID (#162 )
* `@0x/contracts-zero-ex`: Encode protocol ID and source name in bridge source ID
`@0x/asset-swapper`: Use new bridge source ID encoding.
* fix linter issues
* contracts cleanup (#164 )
* `@0x/contracts-zero-ex`: Add PancakeSwapFeature
* `@0x/contracts-zero-ex`: Remove tokenspender/allowance target/greedy tokens stuff.'
`@0x/contract-addresses`: Add BSC addresses. Remove exchangeProxyAllowanceTarget.
`@0x/migrations`: Remove exchangeProxyAllowanceTarget.
* Update contracts/zero-ex/contracts/src/features/IPancakeSwapFeature.sol
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com >
* `@0x/contracts-zero-ex`: Add sushiswap support to PancakeSwap
* `@0x/contract-artifacts`: Regenerate artifacts
`@0x/contract-wrappers`: Regenerate wrappers
* `@0x/contract-addresses`: Add BSC addresses
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com >
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com >
* feat: Better chain support (#163 )
* feat: Better chain support
* feat: better chain support refactor deployment constants (#166 )
* proliferate the chainId
* Refactor sampler to remove DeploymentConstants dependency and fixed addresses
* Rework WETH out, replacing with address(0)
* wat
* hack DeploymentConstants for now
* proliferate the chainId
* Refactor sampler to remove DeploymentConstants dependency and fixed addresses
* remove duped network addresses
* Rework the bridge source encoder
* Use the constants NATIVE_FEE_TOKEN in EP consumer
* `@0x/contract-addresses`: Fix WBNB address (#170 )
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
* multichain enable cakez vip (#171 )
* feat: Better chain support
* feat: better chain support refactor deployment constants (#166 )
* proliferate the chainId
* Refactor sampler to remove DeploymentConstants dependency and fixed addresses
* Rework WETH out, replacing with address(0)
* wat
* hack DeploymentConstants for now
* proliferate the chainId
* Refactor sampler to remove DeploymentConstants dependency and fixed addresses
* remove duped network addresses
* `asset-swapper`: enable pancake VIP route generation
Co-authored-by: Jacob Evans <jacob@dekz.net >
Co-authored-by: Lawrence Forman <me@merklejerk.com >
* `@0x/contracts-zero-ex`: Fix `PancakeSwapFeature` sushi values (#172 )
* `@0x/contracts-zero-ex`: Fix `PancakeSwapFeature` sushi values
* `@0x/contracts-zero-ex`: I am a bad protocologist
Co-authored-by: Lawrence Forman <me@merklejerk.com >
* feat: BSC Nerve + Dodo + Nerve + Ellipsis (#181 )
* feat: BSC Nerve + DODO v1
* CHANGELOGs
* Remove extra balance fetch
* Add Belt
* Added Ellipsis
* Update FQT address
* `@0x/contracts-zero-ex`: Delete TokenSpenderFeature and get stuff compiling
* `@0x/asset-swapper`: fix compilation
* prettier
* `@0x/asset-swapper`: Truncate LiquidityProvider source ID name
* Update packages/asset-swapper/src/utils/market_operation_utils/sampler_operations.ts
Co-authored-by: Jacob Evans <jacob@dekz.net >
* Update packages/asset-swapper/src/utils/market_operation_utils/sampler_operations.ts
Co-authored-by: Jacob Evans <jacob@dekz.net >
* `@0x/contracts-zero-ex`: Fix BakerySwap on PackageSwapFeature (#190 )
* address review comments
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com >
Co-authored-by: Jacob Evans <jacob@dekz.net >
Co-authored-by: Lawrence Forman <me@merklejerk.com >
2021-03-31 18:49:44 -04:00
phil-ociraptor
70ddab0231
[MKR-3] Prepare Asset Swapper for RFQM ( #187 )
...
* Prepare QuoteRequestor for RFQM
* Add unit tests for Quote Requestor changes
* Fix lint errors
2021-03-31 12:11:10 -05:00
phil-ociraptor
06b3464756
Rename {Rfqt=>Rfq} for types in Asset Swapper ( #179 )
...
* Rename {Rfqt=>Rfq} for types in Asset Swapper
* PR edit 1 - fix build errors
* PR edit 2 - rename mocked types used in tests
* PR edit 3 - fix broken test build
* PR edit 4 - rename SwapQuoterRfqOpts and add changelog entry
2021-03-23 17:21:50 -05:00
Alex Kroeger
dabe6fd793
add tx origin blacklist to RFQ options ( #169 )
...
* add tx origin blacklist to RFQ options
* Fix typo
* use set instead of array
* make sure tx origin is lower case
* changed default blacklist value from array to set
2021-03-11 18:05:16 -08:00
Oskar Paolini
f3ca4293bc
feat: add proxy configuration to axios instance in RFQT asset-swapper ( #159 )
...
* add proxy configuration to axios instance
* add support for additional axios instance opts
* move quoteRequestorHttpClient parameter
* fix tests, build errors
* prettier
* bump axios
* bumped mock-axios-adapter version
* downgrade axios again
* re-upgrade axios 🤦
* updated yarn.lock
* updated changelog
Co-authored-by: Alex Kroeger <alexrkroeger@gmail.com >
2021-03-03 11:38:54 -08:00
Romain Butteaud
f98609686d
feat: opt-in positive slippage fee for integrators ( #101 )
...
* feat: Positive Slippage Fee
* fix: rename ethToTakerAssetRate to takerAssetPriceForOneEth
* fix: rename takerAssetPriceForOneEth to takerAssetsPerEth
* fix: export AffiliateFeeType
* rebased off development
* Add a gasOverhead for non-deterministic operations
* CHANGELOGs
* rename outputTokens to outputAmount
* Confirm transformer addresses on Mainnet and Ropsten
* fix import
Co-authored-by: Jacob Evans <jacob@dekz.net >
2021-02-24 12:51:58 +10:00
Alex Kroeger
514f9d2621
feat/alt RFQ MM implementation ( #139 )
...
* baseline adapter code [WIP]
* fixed adapter logic, quote_requester instantiation
* modified quote-requestor test to include alt implementation
* type changes, fixes to quote requestor test
* small fixes
* working tests, made alt utils more readable
* lint errors
* added alt indicative quote tests, minor fixes
* export alt MM market offering types
* altered alt market offering to have id instead of symbols
* addressed minor comments
* updated changelog
* got rid of unnecessary, large if-block, fixed the buy-sell assignment to be from the MM's perspective
* extra logging for debugging
* fixed existingOrder size
* get rid of only flag on test, get rid of extra logging
* prettier
2021-02-22 16:07:30 -08:00
Jacob Evans
c6919eb25a
feat: Mirror Protocol tokens ( #142 )
...
* feat: Mirror Protocol tokens
* added .tap to builder
2021-02-17 10:14:38 +10:00
Jacob Evans
3f4bb933d1
feat: v4 final ( #136 )
...
* v4 FillQuoteTransformer (#104 )
* Update FQT to support v4 orders
* `@0x/contracts-zero-ex`: Tweak FQT
`@0x/contracts-zero-ex`: Drop `ERC20BridgeTransfer` event and add `PartialQuoteFill` event.
* `@0x/contracts-utils`: Add `LibSafeMathV06.downcastToUint128()`
* `@0x/protocol-utils`: Update transformer utils for V4 FQT
* `@0x/contracts-zero-ex`: Fixing FQT tests...
* `@0x/contracts-zero-ex`: rename FQT bridge event
* `@0x/contracts-zero-ex`: Un-`only` tests
* `@0x/migrations`: Update `BridgeAdapter` deployment
* `@0x/contracts-integrations`: Delete `mtx_tests`
* `@0x/protocol-utils`: Address review comments
* `@0x/contracts-zero-ex`: Address review comments
* `@0x/migrations`: Update migrations
Co-authored-by: Michael Zhu <mchl.zhu.96@gmail.com >
Co-authored-by: Lawrence Forman <me@merklejerk.com >
* v4: Asset-swapper (main branch) (#113 )
* refactor quote_requestor
* WIP v4/asset-swapper: Clean up SwapQuoter and remove @0x/orderbook
* Start replacing SignedOrder everywhere
* wip: new order type
* wip
* remove order-utils from most places
* hack: Play around with VerboseX types (#119 )
* hack: Play around with VerboseX types
* More hacks
* Fix up the bridgeData encodings
* Rework Orderbook return type
* feat: Don't charge a protocol fee for RFQ orders WIP (#121 )
* fix simple build errors
* simplify types a little
* remove SwapQuoteCalculator: unnecessary abstraction
* Fix all ./src build errors; make types consistent
* export more types for use in 0x API; modify Orderbook interface
* stop overriding APIOrder
* feat: RFQ v4 + consolidated bridge encoders (#125 )
* feat: check if taker address is contract
* Rework bridge data
* Worst case adjustments
* RFQT v4
* Future/v4 validate orders (#126 )
* RFQT v4
* v4 validate native orders
* use default invalid signature
* refactor rfqt validations in swap quoter
* fix types
* fix RFQT unlisted api key
* remove priceAwareRFQFlag
* adjust maker/taker amounts
* update JSON schemas
* filter zero fillable orders
Co-authored-by: xianny <xianny@gmail.com >
* fix type export
Co-authored-by: xianny <xianny@gmail.com >
* remove order-utils as much as possible
* work on tests compile
* Comment out quote reporter test
* updated tests
* restore order-utils accidental changes
* some lints
* Remove old fill_test
* ts lint disable for now
* update quote report
* Re-enable quote report tests
* make fill data required field
* fix lint
* type guards
* force fillData as required
* fix lint
* fix naming
* exports
* adjust MultiBridge by slippage
* cleanups (checkpoint 1)
* cleanup types (checkpoint #2 )
* remove unused deps
* `@0x/contract-addresses`: Deploy new FQT (#129 )
Co-authored-by: Lawrence Forman <me@merklejerk.com >
* commit bump to republish
* DRY up the rfqt mocker
* fix: Balancer load top pools (#131 )
* fix: Balancer load top 250 pools
* refetch top pools on an interval
Co-authored-by: Jacob Evans <jacob@dekz.net >
Co-authored-by: Kim Persson <kimpers@users.noreply.github.com >
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
Co-authored-by: Lawrence Forman <me@merklejerk.com >
* Update post rebase
* prettier
* Remove test helpers exported in asset-swapper
* Clean up from review comments
* prettier
* lint
* recreate rfqt mocker
* change merge and INVALID_SIGNATURE
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
Co-authored-by: Michael Zhu <mchl.zhu.96@gmail.com >
Co-authored-by: Lawrence Forman <me@merklejerk.com >
Co-authored-by: Xianny <8582774+xianny@users.noreply.github.com >
Co-authored-by: Kim Persson <kimpers@users.noreply.github.com >
2021-02-10 19:20:15 +10:00
Jacob Evans
602605ab4b
Disable Bancor Service for non-mainnet ( #89 )
...
* Disable Bancor Service for non-mainnet
* Fix import
* Fix mocked tests
2020-12-16 21:58:39 +10:00
Jacob Evans
d7bea98075
fix: [asset-swapper] Rework Bancor to only use paths and sample best path ( #88 )
...
* Rework Bancor to only use paths and sample best path
* Deployed address
* Clean up and pin bancor sdk
* CHANGELOGs
2020-12-16 17:34:47 +10:00
Jacob Evans
4f82543bdf
feat: asset-swapper tweak the gas schedule + return decimals ( #34 )
...
* feat: asset-swapper Return decimals from sampler in quote
* feat: asset-swapper tweak the gas schedule
* fix lint
* CHANGELOG
2020-11-17 11:36:53 +10:00
mzhu25
7403c0255a
Feature/liquidity provider sandbox ( #16 )
...
* Update liquidity provider feature to use sandbox
* add support for liquidity provider feature in the exchange proxy swap quote consumer
* Move to off-chain liquidity provider registry
* Update ILiquidityProvider interface
* Remove some unused artifacts and wrappers
* Consolidate ILiquidityProvider
* prettier
* lint
* Address PR feedback
* Add failover to sandbox
* Add test for failover behavior in LiquidityProviderSandbox
* Update changelogs
* Emit events for the new LiquidityProvider scenarios
* Fix swap quote consumer bug
* post-rebase fixes
* `@0x/contracts-zero-ex`: bump feature versions
* Add default field to TokenAdjacencyGraph
* update addresses
Co-authored-by: Lawrence Forman <me@merklejerk.com >
2020-11-13 12:22:21 -08:00
Daniel Pyrathon
36bd8f68c9
adds amendments to the rollout feature flag. Rollout indicative quote… ( #30 )
...
* adds amendments to the rollout feature flag. Rollout indicative quotes indipendently from firm quotes.
* Updates based on Brandon's feedback
2020-11-05 12:46:06 -08:00
Jacob Evans
e10a81023a
feat: [asset-swapper] more hops via token adjacency ( #24 )
...
* feat: [asset-swapper] more hops via token adjacency
* fix lint
* CHANGELOG
2020-11-03 07:48:37 +10:00
Daniel Pyrathon
689a8881c2
fix: Changed price-aware RFQ flag to be a argument parameter ( #13 )
...
* Changed price-aware RFQ flag to be a argument parameter
* prettified tests
* lint
2020-10-27 12:56:26 -07:00
Jacob Evans
99f5be8378
chore: [asset swapper] sampler Solidity 0.6 + Bridge addresses in AS ( #4 )
...
* Refactor excess interfaces
* Compiles on 0.6
* Refactored into try/catch
* Rebase and Refactored to v06
* Handle invalid registry in LP
* Update packages/asset-swapper/contracts/src/LiquidityProviderSampler.sol
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
* chore: [asset-swapper] Move Bridge Addresses and Gas schedule
* curve->pool
* lint
* Refactor to fix module load order
* Move FEE Schedule
* rollup: Swerve/Sushi/SnowSwap/DODO (#7 )
* rollup: Swerve/Sushi
* DODO Rollup + Snowswap Swerve
* hardcode addresses temporarily
* rebase
* rename to SUSHISWAP_ROUTER
* CHANGELOGs
* CHANGELOGs
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
2020-10-27 15:16:09 +10:00
Daniel Pyrathon
85fde8f9a5
comments and renaming
2020-10-19 17:03:26 -07:00
Daniel Pyrathon
a03d0800b0
Add changes for the feature flag
2020-10-19 16:58:45 -07:00
Daniel Pyrathon
c13ffb2072
added linting and prettifying
2020-09-30 13:54:48 -07:00
Daniel Pyrathon
7bc9701c81
initial implementation
2020-09-28 13:15:44 -07:00
Lawrence Forman
f84b375cde
UniswapFeature ( #2703 )
...
* Minimal Uniswap accessor.
* Add comments
* Safe math
* mainnet gas benchmark
* Assembler Uniswap
* Selectors and addresses
* Fix bugs in ABI encoders
* Typo
* AsmUniswap test
* Fix wantAmount computation
* Golfing
* Bypass AllowanceTarget
* Generalized asm uniswapper
* Implement ordering
* Fix pair computation
* #6 Golfing Iron
* Remove 'to' argument (saves 377 gas)
* New contract api
* `@0x/contracts-zero-ex`: Add `UniswapFeature`
* `@0x/contract-artifacts`: Regenerate artifacts
* `@0x/contract-wrappers`: Regenerate wrappers
* `@0x/asset-swapper`: Add Uniswap VIP support.
`@0x/asset-swapper`: Add `includeSources` support.
* `@0x/contracts-zero-ex`: Fix misleading comments in `UniswapFeature`.
`@0x/asset-swapper`: Fix linter errors.
* `@0x/asset-swapper`: Fix source filter bugs.
* `@0x/contracts-zero-ex`: `UniswapFeature`: Reduce calldata size for AllowanceTarget call
`@0x/asset-swapper`: Fix failing test.
* `@0x/contracts-zero-ex`: Fix ETH buy tokens not being normalized to WETH.
* `@0x/asset-swapper`: Fix multi-hop weirdness with source filters.
* `@0x/asset-swapper`: Fix failing test.
* `@0x/asset-swapper`: Really fix that broken AS test.
* `@0x/asset-swapper`: use filter objects instead of source array for valid buy and sell sources/
* `@0x/asset-swapper`: Move some source filtering logic into the sampler operations.
* `@0x/contracts-zero-ex`: Address PR feedback
* `@0x/contracts-zero-ex`: Fix feature version bug.
* `@0x/asset-swapper`: Did I actually fix AS tests this time? Who knows.
Co-authored-by: Remco Bloemen <remco@0x.org >
Co-authored-by: Michael Zhu <mchl.zhu.96@gmail.com >
Co-authored-by: Lawrence Forman <me@merklejerk.com >
2020-09-23 16:27:48 +10:00
Xianny
3da05f2812
batch requests with bancor SDK ( #2699 )
...
* upgrade bancor SDK for batch requests
* lint
* changes after review
* deploy bancor bridge
* small fixes
2020-09-11 11:09:10 -07:00
mzhu25
bab34c2d21
Feature/bunny hop ( #2647 )
...
* `@0x/contracts-erc20-bridge-sampler`: Add TwoHopSampler + refactor
* `@0x/asset-swapper`: Refactor + add two-hop skeleton
* Round out two-hop support in asset-swapper
* Add BalancerSampler, use it for two-hop quotes
* Fix bugs discovered from simbot
* rebases are hard
* Add intermediate token to MultiHop source breakdown
* Fix market buy bugs
* Use hybrid on-chain/off-chain sampling for Balancer
* Another day, another rebase
* Update changelogs
* Address PR feedback, CI fixes
* Address more PR feedback
2020-08-27 08:20:09 +10:00
Jacob Evans
cc31445189
feat: asset-swapper mooniswap ( #2675 )
...
* feat: asset-swapper sampler early exit
* feat: asset-swapper mooniswap
* tests and linter
* deploy to mainnet
* CHANGELOGs
* fix excluded sources difference
* typo
2020-08-24 11:21:01 +10:00
Xianny
af78238507
Feat/bancor v2 ( #2650 )
...
* Bancor Bridge contract
* refactor Quote and FillData types
* BancorService (wrapper for the Bancor SDK)
* disable bancor while waiting for bancor SDK update
* add bancor to test
2020-08-21 15:11:35 -07:00
Jacob Evans
7e8b56eef4
feat: mStable + FQT Rollup ( #2662 )
...
* feat: mStable
* deploy and CHANGELOG
* `@0x/contracts-utils`: Add more testnet addresses.
* `@0x/contract-addresses`: Deply Mstable on testnets
* `@0x/contract-addresses`: Remove testnet deployments of mStable :-)
* move `erc20-bridge-sampler` into `asset-swapper`
remove `DevUtils` dependency from sampler contract.
* `@0x/asset-swapper`: Add ERC20BridgeSampler support for validating orders in maker fees denominated in non-maker assets.
`@0x/asset-swapper`: Add tests for `NativeOrderSampler`.
* `@0x/asset-swapper`: Return `0` sample if native order asset data is unsupported.
* `@0x/asset-swapper`: Fix failing test.
* feat: ExchangeProxy FQT fruit rollup (#2645 )
* feat: Optimize Bridges in ExchangeProxy
* compile and most work
* work around to trust the delecall contract
* force allowances
* Update Kyber/Eth2Dai bridges
* Remove memory state where not required
* cleanup
* Combine Bridges into one adapter
* mixins
* refactor out ZeroExBridge
* move out interface
* comment out hacks
* update migrations
* remove simbot hacks
* AdapterAddresses and mStable
* Share constructor arg
* fix migration
* Remove whitespace
* `@0x/contracts-zero-ex`: BridgeAdapter -- revert if bridge address is 0.
* `@0x/contract-addresses`: Deploy FQT.
Co-authored-by: Lawrence Forman <me@merklejerk.com >
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
* update ganache contract addresses
* fix: asset-swapper empty batch call (#2669 )
* update ganache contract addresses
* fix: asset-swapper prevent empty sampler batch call
* add sampler to migrations
* change migrations version
* Use contract-wrappers and artifacts
* remove extra data
* remove deps, set sampler to NULL_ADDRESS
* all the exports
* noop sell rate too
* update ganache contract addresses
Co-authored-by: Lawrence Forman <me@merklejerk.com >
Co-authored-by: Lawrence Forman <lawrence@0xproject.com >
2020-08-20 08:18:44 +10:00
Jacob Evans
71cde281b9
fix: asset-swapper depth buy scale ( #2659 )
2020-08-09 16:38:59 +10:00
Jacob Evans
5afe2616a4
feat: asset-swapper market depth ( #2641 )
...
* feat: asset-swapper market depth
* split promises into 2
* fix lint and docs
* chore: refactor
* rebase off development
* CHANGELOG
2020-07-27 15:07:52 +10:00
Steve Klebanoff
34138fc3b5
handle empty array in reduce
2020-07-23 17:15:04 -07:00
Steve Klebanoff
d877d3686c
linting
2020-07-23 16:03:09 -07:00
Steve Klebanoff
8260615b4e
fix merge conflict
2020-07-23 16:02:16 -07:00
Steve Klebanoff
c3f6d48966
Merge branch 'development' into feature/new-order-reporter
2020-07-23 16:01:27 -07:00
Steve Klebanoff
02f979bc74
linting
2020-07-23 15:55:56 -07:00
Steve Klebanoff
de1c71aacc
fix syntax
2020-07-23 15:54:34 -07:00
Steve Klebanoff
ca2aa72e0f
Merge development
2020-07-23 15:17:35 -07:00
Daniel Pyrathon
d7918ea047
prettified
2020-07-23 10:16:22 -07:00
Steve Klebanoff
9edaa3a64e
fix
2020-07-22 23:50:55 -07:00
Steve Klebanoff
6e4e313792
Merge branch 'development' into feature/new-order-reporter-merged
2020-07-22 23:50:28 -07:00
Daniel Pyrathon
e6dcf92ec8
added new parameter nativeExclusivelyRFQT
2020-07-22 23:02:40 -07:00
Steve Klebanoff
3e99c95791
Linting
2020-07-22 13:26:31 -07:00
Steve Klebanoff
4f83521be8
Merge branch 'development' into feature/new-order-reporter-merged
2020-07-22 13:25:35 -07:00
Jacob Evans
aae93bb6a7
fix: asset-swapper yield to the event loop every mix path ( #2637 )
...
* fix: allow a empty overrides to signal no default
* fix: asset-swapper yield to the event loop every mix path
* fix: optimizations skip order find if Native excluded
* changelogs
* chore: update protocol fee multiplier
* fix: tests async
2020-07-21 17:06:05 +10:00
Jacob Evans
762e0aec2d
fix: Update to use KNP getExpectedRateAfterFee ( #2629 )
...
* Update to use KNP getExpectedRateAfterFee
* hack: use overrides instead of forking in ganache
* fix: added some tests using overrides
* override sampler
* Overrides in bridge_sampler_mainnet_test
* use getContracts to fake out tests
* chore: supply devUtils address
* feat: specify the call override by default
* CHANGELOGs
* export SamplerOverrides
* fix package.json
* fix: after rebase
2020-07-15 14:05:57 +10:00
Steve Klebanoff
1c84709db3
isApiKeyWhitelisted helper fn
2020-07-10 16:03:14 -07:00
Steve Klebanoff
120714ecfc
linting and remove unused function
2020-07-08 15:49:42 -07:00
Steve Klebanoff
615874d2ec
always pass through quoterequestor
2020-07-08 15:38:36 -07:00
Steve Klebanoff
75689cee96
create new quote requestor each time
2020-07-08 15:07:36 -07:00