@superfluid-finance/ethereum-contracts 1.2.3-dev.d435096.0 → 1.2.3-dev.f8cb3ec.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +2 -2
  3. package/build/contracts/AccessControl.json +1 -1
  4. package/build/contracts/AccessControlEnumerable.json +1 -1
  5. package/build/contracts/Address.json +1 -1
  6. package/build/contracts/AgreementBase.json +9 -9
  7. package/build/contracts/AgreementLibrary.json +4 -4
  8. package/build/contracts/BaseRelayRecipient.json +1 -1
  9. package/build/contracts/BatchLiquidator.json +165 -165
  10. package/build/contracts/BatchOperation.json +1 -1
  11. package/build/contracts/CFAv1Library.json +4 -4
  12. package/build/contracts/CallUtils.json +1 -1
  13. package/build/contracts/ClosingOnUpdateFlowTestApp.json +4 -4
  14. package/build/contracts/ConstantFlowAgreementV1.json +5 -5
  15. package/build/contracts/Context.json +1 -1
  16. package/build/contracts/ContextDefinitions.json +1 -1
  17. package/build/contracts/Create2.json +1 -1
  18. package/build/contracts/CustomSuperTokenBase.json +2 -2
  19. package/build/contracts/ERC165.json +1 -1
  20. package/build/contracts/ERC1820Implementer.json +1 -1
  21. package/build/contracts/ERC1820RegistryCompiled.json +1 -1
  22. package/build/contracts/ERC20.json +1 -1
  23. package/build/contracts/ERC20Burnable.json +1 -1
  24. package/build/contracts/ERC20Pausable.json +1 -1
  25. package/build/contracts/ERC20PresetMinterPauser.json +1 -1
  26. package/build/contracts/ERC20WithTokenInfo.json +1 -1
  27. package/build/contracts/ERC777Helper.json +1 -1
  28. package/build/contracts/ERC777RecipientDrainingGas.json +4 -4
  29. package/build/contracts/ERC777RecipientReverting.json +4 -4
  30. package/build/contracts/EnumerableSet.json +1 -1
  31. package/build/contracts/ExclusiveInflowTestApp.json +4 -4
  32. package/build/contracts/FixedSizeData.json +1 -1
  33. package/build/contracts/FlowExchangeTestApp.json +4 -4
  34. package/build/contracts/FlowOperatorDefinitions.json +1 -1
  35. package/build/contracts/FullUpgradableSuperTokenProxy.json +4 -4
  36. package/build/contracts/IAccessControl.json +1 -1
  37. package/build/contracts/IAccessControlEnumerable.json +1 -1
  38. package/build/contracts/IConstantFlowAgreementV1.json +1 -1
  39. package/build/contracts/IDAv1Library.json +4 -4
  40. package/build/contracts/IERC165.json +1 -1
  41. package/build/contracts/IERC1820Implementer.json +1 -1
  42. package/build/contracts/IERC1820Registry.json +1 -1
  43. package/build/contracts/IERC20.json +1 -1
  44. package/build/contracts/IERC20Metadata.json +1 -1
  45. package/build/contracts/IERC777.json +1 -1
  46. package/build/contracts/IERC777Recipient.json +1 -1
  47. package/build/contracts/IERC777Sender.json +1 -1
  48. package/build/contracts/IInstantDistributionAgreementV1.json +1 -1
  49. package/build/contracts/IMaticBridgedNativeSuperToken.json +2 -2
  50. package/build/contracts/IMaticBridgedNativeSuperTokenCustom.json +2 -2
  51. package/build/contracts/IMultiSigWallet.json +1 -1
  52. package/build/contracts/IPureSuperToken.json +2 -2
  53. package/build/contracts/IPureSuperTokenCustom.json +2 -2
  54. package/build/contracts/IRelayRecipient.json +1 -1
  55. package/build/contracts/IResolver.json +1 -1
  56. package/build/contracts/ISETH.json +2 -2
  57. package/build/contracts/ISETHCustom.json +2 -2
  58. package/build/contracts/ISuperAgreement.json +1 -1
  59. package/build/contracts/ISuperApp.json +2 -2
  60. package/build/contracts/ISuperToken.json +2 -2
  61. package/build/contracts/ISuperTokenFactory.json +2 -2
  62. package/build/contracts/ISuperfluid.json +425 -418
  63. package/build/contracts/ISuperfluidGovernance.json +2 -2
  64. package/build/contracts/ISuperfluidToken.json +1 -1
  65. package/build/contracts/ITOGAv1.json +1208 -1208
  66. package/build/contracts/ITOGAv2.json +1208 -1208
  67. package/build/contracts/Initializable.json +1 -1
  68. package/build/contracts/InstantDistributionAgreementV1.json +5 -5
  69. package/build/contracts/Int96SafeMath.json +1 -1
  70. package/build/contracts/MaticBridgedNativeSuperTokenProxy.json +191 -191
  71. package/build/contracts/NonClosableOutflowTestApp.json +4 -4
  72. package/build/contracts/Ownable.json +1 -1
  73. package/build/contracts/Pausable.json +1 -1
  74. package/build/contracts/Proxy.json +1 -1
  75. package/build/contracts/PureSuperToken.json +88 -88
  76. package/build/contracts/Resolver.json +90 -90
  77. package/build/contracts/SETHProxy.json +196 -196
  78. package/build/contracts/SafeCast.json +1 -1
  79. package/build/contracts/SafeERC20.json +1 -1
  80. package/build/contracts/SafeMath.json +1 -1
  81. package/build/contracts/SelfDeletingFlowTestApp.json +4 -4
  82. package/build/contracts/SlotsBitmapLibrary.json +1 -1
  83. package/build/contracts/Strings.json +1 -1
  84. package/build/contracts/SuperAppBase.json +2 -2
  85. package/build/contracts/SuperAppDefinitions.json +1 -1
  86. package/build/contracts/SuperToken.json +46 -46
  87. package/build/contracts/SuperTokenFactory.json +35 -35
  88. package/build/contracts/SuperTokenFactoryBase.json +33 -33
  89. package/build/contracts/SuperTokenFactoryHelper.json +35 -35
  90. package/build/contracts/SuperUpgrader.json +422 -422
  91. package/build/contracts/Superfluid.json +5488 -5454
  92. package/build/contracts/SuperfluidFrameworkDeployer.json +472 -472
  93. package/build/contracts/SuperfluidGovernanceBase.json +9 -9
  94. package/build/contracts/SuperfluidGovernanceConfigs.json +1 -1
  95. package/build/contracts/SuperfluidGovernanceII.json +17 -17
  96. package/build/contracts/SuperfluidGovernanceIIProxy.json +17 -17
  97. package/build/contracts/SuperfluidLoader.json +144 -144
  98. package/build/contracts/SuperfluidToken.json +1217 -1217
  99. package/build/contracts/TOGA.json +1218 -1218
  100. package/build/contracts/TestGovernance.json +171 -171
  101. package/build/contracts/TestToken.json +94 -94
  102. package/build/contracts/TokenCustodian.json +214 -214
  103. package/build/contracts/TokenInfo.json +1 -1
  104. package/build/contracts/UInt128SafeMath.json +1 -1
  105. package/build/contracts/UUPSProxiable.json +132 -132
  106. package/build/contracts/UUPSProxy.json +81 -81
  107. package/build/contracts/UUPSUtils.json +37 -37
  108. package/build/contracts-sizes.txt +7 -7
  109. package/contracts/interfaces/superfluid/ISuperfluid.sol +14 -6
  110. package/contracts/superfluid/Superfluid.sol +12 -10
  111. package/package.json +2 -2
  112. package/scripts/{deploy-unlisted-native-super-token.js → deploy-unlisted-pure-super-token.js} +4 -4
  113. package/scripts/gov-transfer-framework-ownership.js +3 -3
  114. package/scripts/libs/getConfig.js +3 -3
  115. package/utils/README.md +19 -1
  116. package/utils/stream-closer.html +212 -0
  117. package/utils/supertoken-deployer.html +1 -1
@@ -0,0 +1,212 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Stream Closer</title>
5
+ <meta charset="UTF-8">
6
+ <script src="https://cdn.jsdelivr.net/npm/ethers@5.5.4/dist/ethers.umd.min.js"
7
+ integrity="sha256-u2JkA91avqVaE60Vn+iwn8Nh6yQpddB4D6mTLwbEntk="
8
+ crossorigin="anonymous">
9
+ </script>
10
+ <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
11
+ integrity="sha256-4+XzXVhsDmqanXGHaHvgh1gMQKX40OUvDEBTu8JcmNs="
12
+ crossorigin="anonymous">
13
+ </script>
14
+ <style>
15
+ .header-container {
16
+ display: flex;
17
+ justify-content: space-between;
18
+ align-items: center;
19
+ }
20
+
21
+ .height-fit-content {
22
+ height: fit-content;
23
+ }
24
+ </style>
25
+ </head>
26
+ <body>
27
+ <div class="outerDiv">
28
+ <div class="header-container">
29
+ <h1>Stream Closer</h1>
30
+ <h3 id="loader" style="text-align: center; display: none;">Loading...</h3>
31
+ <button id='connect-wallet-btn' type="button" class="height-fit-content"
32
+ onclick="execFuncWithLoader(connectWallet)">
33
+ connect wallet
34
+ </button>
35
+ </div>
36
+
37
+ <div>
38
+ <label for="superTokenAddr">Super Token address:</label><br/>
39
+ <input id="superTokenAddr" size="40"/><br/>
40
+ <label for="senderAddr">Sender address:</label><br/>
41
+ <input id="senderAddr" size="40"/><br/>
42
+ <label for="receiverAddr">Receiver address:</label><br/>
43
+ <input id="receiverAddr" size="40"/><br/>
44
+ <button onclick="execFuncWithLoader(closeStream)">Close Stream</button><br></br>
45
+ <span id="flowData"></span><br/>
46
+ <b><span id="successMsg"></span></b><br/>
47
+ </div>
48
+ </div>
49
+
50
+ <script>
51
+ ISuperfluidAbi = '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"agreementType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"code","type":"address"}],"name":"AgreementClassRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"agreementType","type":"bytes32"},{"indexed":false,"internalType":"address","name":"code","type":"address"}],"name":"AgreementClassUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ISuperApp","name":"app","type":"address"}],"name":"AppRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ISuperfluidGovernance","name":"oldGov","type":"address"},{"indexed":false,"internalType":"contract ISuperfluidGovernance","name":"newGov","type":"address"}],"name":"GovernanceReplaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ISuperApp","name":"app","type":"address"},{"indexed":false,"internalType":"uint256","name":"reason","type":"uint256"}],"name":"Jail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ISuperTokenFactory","name":"newFactory","type":"address"}],"name":"SuperTokenFactoryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ISuperToken","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"code","type":"address"}],"name":"SuperTokenLogicUpdated","type":"event"},{"inputs":[],"name":"getGovernance","outputs":[{"internalType":"contract ISuperfluidGovernance","name":"governance","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidGovernance","name":"newGov","type":"address"}],"name":"replaceGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperAgreement","name":"agreementClassLogic","type":"address"}],"name":"registerAgreementClass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperAgreement","name":"agreementClassLogic","type":"address"}],"name":"updateAgreementClass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"agreementType","type":"bytes32"}],"name":"isAgreementTypeListed","outputs":[{"internalType":"bool","name":"yes","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperAgreement","name":"agreementClass","type":"address"}],"name":"isAgreementClassListed","outputs":[{"internalType":"bool","name":"yes","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"agreementType","type":"bytes32"}],"name":"getAgreementClass","outputs":[{"internalType":"contract ISuperAgreement","name":"agreementClass","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bitmap","type":"uint256"}],"name":"mapAgreementClasses","outputs":[{"internalType":"contract ISuperAgreement[]","name":"agreementClasses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bitmap","type":"uint256"},{"internalType":"bytes32","name":"agreementType","type":"bytes32"}],"name":"addToAgreementClassesBitmap","outputs":[{"internalType":"uint256","name":"newBitmap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bitmap","type":"uint256"},{"internalType":"bytes32","name":"agreementType","type":"bytes32"}],"name":"removeFromAgreementClassesBitmap","outputs":[{"internalType":"uint256","name":"newBitmap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSuperTokenFactory","outputs":[{"internalType":"contract ISuperTokenFactory","name":"factory","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSuperTokenFactoryLogic","outputs":[{"internalType":"address","name":"logic","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperTokenFactory","name":"newFactory","type":"address"}],"name":"updateSuperTokenFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperToken","name":"token","type":"address"}],"name":"updateSuperTokenLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"configWord","type":"uint256"}],"name":"registerApp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"configWord","type":"uint256"},{"internalType":"string","name":"registrationKey","type":"string"}],"name":"registerAppWithKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"uint256","name":"configWord","type":"uint256"}],"name":"registerAppByFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"}],"name":"isApp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"}],"name":"getAppLevel","outputs":[{"internalType":"uint8","name":"appLevel","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"}],"name":"getAppManifest","outputs":[{"internalType":"bool","name":"isSuperApp","type":"bool"},{"internalType":"bool","name":"isJailed","type":"bool"},{"internalType":"uint256","name":"noopMask","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"}],"name":"isAppJailed","outputs":[{"internalType":"bool","name":"isJail","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"targetApp","type":"address"}],"name":"allowCompositeApp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"contract ISuperApp","name":"targetApp","type":"address"}],"name":"isCompositeAppAllowed","outputs":[{"internalType":"bool","name":"isAppAllowed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bool","name":"isTermination","type":"bool"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"callAppBeforeCallback","outputs":[{"internalType":"bytes","name":"cbdata","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bool","name":"isTermination","type":"bool"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"callAppAfterCallback","outputs":[{"internalType":"bytes","name":"appCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"ctx","type":"bytes"},{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"uint256","name":"appAllowanceGranted","type":"uint256"},{"internalType":"int256","name":"appAllowanceUsed","type":"int256"},{"internalType":"contract ISuperfluidToken","name":"appAllowanceToken","type":"address"}],"name":"appCallbackPush","outputs":[{"internalType":"bytes","name":"appCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"ctx","type":"bytes"},{"internalType":"int256","name":"appAllowanceUsedDelta","type":"int256"}],"name":"appCallbackPop","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"ctx","type":"bytes"},{"internalType":"uint256","name":"appAllowanceWantedMore","type":"uint256"},{"internalType":"int256","name":"appAllowanceUsedDelta","type":"int256"}],"name":"ctxUseAllowance","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"ctx","type":"bytes"},{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"uint256","name":"reason","type":"uint256"}],"name":"jailApp","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperAgreement","name":"agreementClass","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"callAgreement","outputs":[{"internalType":"bytes","name":"returnedData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"name":"callAppAction","outputs":[{"internalType":"bytes","name":"returnedData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperAgreement","name":"agreementClass","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"callAgreementWithContext","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"},{"internalType":"bytes","name":"returnedData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperApp","name":"app","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"callAppActionWithContext","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"decodeCtx","outputs":[{"components":[{"internalType":"uint8","name":"appLevel","type":"uint8"},{"internalType":"uint8","name":"callType","type":"uint8"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"bytes4","name":"agreementSelector","type":"bytes4"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"appAllowanceGranted","type":"uint256"},{"internalType":"uint256","name":"appAllowanceWanted","type":"uint256"},{"internalType":"int256","name":"appAllowanceUsed","type":"int256"},{"internalType":"address","name":"appAddress","type":"address"},{"internalType":"contract ISuperfluidToken","name":"appAllowanceToken","type":"address"}],"internalType":"struct ISuperfluid.Context","name":"context","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"isCtxValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"operationType","type":"uint32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISuperfluid.Operation[]","name":"operations","type":"tuple[]"}],"name":"batchCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"operationType","type":"uint32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISuperfluid.Operation[]","name":"operations","type":"tuple[]"}],"name":"forwardBatchCall","outputs":[],"stateMutability":"nonpayable","type":"function"}]';
52
+ IConstantFlowAgreementV1Abi = '[{"inputs":[{"internalType":"contract ISuperfluid","name":"host","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"uuid","type":"bytes32"},{"indexed":false,"internalType":"address","name":"codeAddress","type":"address"}],"name":"CodeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"int96","name":"flowRate","type":"int96"},{"indexed":false,"internalType":"int256","name":"totalSenderFlowRate","type":"int256"},{"indexed":false,"internalType":"int256","name":"totalReceiverFlowRate","type":"int256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"}],"name":"FlowUpdated","type":"event"},{"inputs":[],"name":"agreementType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCodeAddress","outputs":[{"internalType":"address","name":"codeAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"realtimeBalanceOf","outputs":[{"internalType":"int256","name":"dynamicBalance","type":"int256"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"owedDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"}],"name":"getMaximumFlowRateFromDeposit","outputs":[{"internalType":"int96","name":"flowRate","type":"int96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"int96","name":"flowRate","type":"int96"}],"name":"getDepositRequiredForFlowRate","outputs":[{"internalType":"uint256","name":"deposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"isPatricianPeriodNow","outputs":[{"internalType":"bool","name":"isCurrentlyPatricianPeriod","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isPatricianPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"int96","name":"flowRate","type":"int96"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"createFlow","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"int96","name":"flowRate","type":"int96"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"updateFlow","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"ctx","type":"bytes"}],"name":"deleteFlow","outputs":[{"internalType":"bytes","name":"newCtx","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"getFlow","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"int96","name":"flowRate","type":"int96"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"owedDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"bytes32","name":"flowId","type":"bytes32"}],"name":"getFlowByID","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"int96","name":"flowRate","type":"int96"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"owedDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"getAccountFlowInfo","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"int96","name":"flowRate","type":"int96"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"owedDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISuperfluidToken","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"getNetFlow","outputs":[{"internalType":"int96","name":"flowRate","type":"int96"}],"stateMutability":"view","type":"function"}]\n';
53
+
54
+ let connData = {}; // chainId, provider, userAddress, ...
55
+
56
+ // TODO: replace with external canonical network list
57
+ networks = [
58
+ { chainId: 5, hostAddr: "0x22ff293e14F1EC3A09B137e9e06084AFd63adDF9" }, // eth-goerli
59
+ { chainId: 42, hostAddr: "0xF0d7d1D47109bA426B9D8A3Cde1941327af1eea3" }, // eth-kovan
60
+ { chainId: 4, hostAddr: "0xeD5B5b32110c3Ded02a07c8b8e97513FAfb883B6" }, // eth-rinkeby
61
+ { chainId: 3, hostAddr: "0xF2B4E81ba39F5215Db2e05B2F66f482BB8e87FD2" }, // eth-ropsten
62
+ { chainId: 80001, hostAddr: "0xEB796bdb90fFA0f28255275e16936D25d3418603" }, // polygon-mumbai
63
+ { chainId: 69, hostAddr: "0x74b57883f8ce9F2BD330286E884CfD8BB24AC4ED" }, // optimism-kovan
64
+ { chainId: 421611, hostAddr: "0xE01F8743677Da897F4e7De9073b57Bf034FC2433" }, // arbitrum-rinkeby
65
+ { chainId: 43113, hostAddr: "0xf04F2C525819691ed9ABD3D2B7109E1633795e68" }, // avalanche-fuji
66
+
67
+ { chainId: 137, hostAddr: "0x3E14dC1b13c488a8d5D310918780c983bD5982E7" }, // polygon-mainnet
68
+ { chainId: 100, hostAddr: "0x2dFe937cD98Ab92e59cF3139138f18c823a4efE7" }, // xdai-mainnet
69
+ { chainId: 10, hostAddr: "0x567c4B141ED61923967cA25Ef4906C8781069a10" }, // optimism-mainnnet
70
+ { chainId: 42161, hostAddr: "0xCf8Acb4eF033efF16E8080aed4c7D5B9285D2192" }, // arbitrum-one
71
+ { chainId: 43114, hostAddr: "0x60377C7016E4cdB03C87EF474896C11cB560752C" } // avalanche-c
72
+ ];
73
+
74
+ // pre-fill input fields from query params if present
75
+ // example queryString: chainId=42&token=0xE3817a5e3e436a9b114A829C9FCc02355193cf41&sender=0x30B125d5Fc58c1b8E3cCB2F1C71a1Cc847f024eE&receiver=0x38EEcBc486111D9B0DD85Eeb9512AF214705617A
76
+ const params = new URLSearchParams(window.location.search)
77
+ connData.wantedChainId = Number(params.get("chainId")); // 0 if undefined
78
+ $("#superTokenAddr").val(params.get("token"));
79
+ $("#senderAddr").val(params.get("sender"));
80
+ $("#receiverAddr").val(params.get("receiver"));
81
+
82
+ // executes a function and shows a loading UI hint in the meantime
83
+ async function execFuncWithLoader(func) {
84
+ $("#loader").toggle();
85
+ try {
86
+ await func();
87
+ } catch (err) {
88
+ console.error(err);
89
+ } finally {
90
+ $("#loader").toggle();
91
+ }
92
+ }
93
+
94
+ // connects to a browser injected wallet (https://eips.ethereum.org/EIPS/eip-1193)
95
+ async function connectWallet() {
96
+ // does nothing if already connected
97
+ if (!connData.provider) {
98
+ $("#connect-wallet-btn").text("connecting...");
99
+ await setAccount();
100
+
101
+ if (setNetwork(Number(window.ethereum.chainId))) {
102
+ $("#connect-wallet-btn").text(connData.userAddress + " | chain id: " + connData.chainId);
103
+ } else {
104
+ $("#connect-wallet-btn").text("not connected");
105
+ }
106
+ }
107
+ }
108
+
109
+ async function setAccount() {
110
+ const response = await window.ethereum.request({ method: "eth_requestAccounts" });
111
+ connData.userAddress = response[0];
112
+ }
113
+
114
+ function setNetwork(chainId) {
115
+ if (connData.wantedChainId !== 0 && chainId !== connData.wantedChainId) {
116
+ alert(`Wallet NOT connected to a chain with wanted id ${connData.wantedChainId}`);
117
+ return false;
118
+ }
119
+ connData.network = networks.filter(n => n.chainId === chainId)[0];
120
+ if (connData.network === undefined) {
121
+ alert(`ERR: wallet connected to unsupported network (chainId: ${chainId})`);
122
+ return false;
123
+ }
124
+ connData.chainId = Number(chainId);
125
+ connData.provider = new ethers.providers.Web3Provider(window.ethereum);
126
+ if (!window.ethereum) {
127
+ alert("ERR: no injected ethereum provider found");
128
+ return false;
129
+ }
130
+ return true;
131
+ }
132
+
133
+ // handle network or account changes in wallet after init
134
+ if (window.ethereum) {
135
+ window.ethereum.on("accountsChanged", async accounts => {
136
+ console.log("on accounts changed: ", accounts[0]);
137
+ connData.userAddress = accounts[0];
138
+ $("#connect-wallet-btn").text(connData.userAddress + " | chain id: " + connData.chainId);
139
+ });
140
+ window.ethereum.on("chainChanged", async chainId => {
141
+ console.log("chain changed")
142
+ if (connData.userAddress === undefined) {
143
+ await setAccount();
144
+ }
145
+ if (setNetwork(Number(chainId))) {
146
+ $("#connect-wallet-btn").text(connData.userAddress + " | chain id: " + connData.chainId);
147
+ } else {
148
+ $("#connect-wallet-btn").text("not connected");
149
+ }
150
+ });
151
+ }
152
+
153
+ async function closeStream() {
154
+ if(connData.provider === undefined) {
155
+ alert("no wallet connected");
156
+ return;
157
+ }
158
+
159
+ const tokenAddr = $("#superTokenAddr").val();
160
+ const senderAddr = $("#senderAddr").val();
161
+ const receiverAddr = $("#receiverAddr").val();
162
+
163
+ console.log(`close stream with args: ${tokenAddr}, ${senderAddr}, ${receiverAddr}`);
164
+
165
+ try {
166
+ console.log(`hostAddr: ${connData.network.hostAddr}`);
167
+ const host = new ethers.Contract(connData.network.hostAddr, ISuperfluidAbi, connData.provider.getSigner());
168
+
169
+ // get CFA
170
+ const cfaV1Type = ethers.utils.keccak256(
171
+ ethers.utils.toUtf8Bytes("org.superfluid-finance.agreements.ConstantFlowAgreement.v1"));
172
+ const cfaV1Addr = await host.getAgreementClass(cfaV1Type);
173
+ console.log(`instantiating CFAv1 contract at ${cfaV1Addr}`);
174
+ const cfaV1 = new ethers.Contract(cfaV1Addr, IConstantFlowAgreementV1Abi, connData.provider);
175
+ window.cfaV1 = cfaV1;
176
+
177
+ console.log(`getting flow for token ${tokenAddr}, sender ${senderAddr}, receiver ${receiverAddr}`);
178
+ const flow = await cfaV1.getFlow(tokenAddr, senderAddr, receiverAddr);
179
+
180
+ if (flow.timestamp.eq(0)) {
181
+ alert(`There exists no open flow with this parameters!`);
182
+ return;
183
+ }
184
+
185
+ const prettyTimestamp = Date(flow.timestamp.toNumber()*1000);
186
+ const prettyFlowRate = `${ethers.utils.formatUnits(flow.flowRate.mul(3600*24))}/day`;
187
+ const prettyDeposit = ethers.utils.formatUnits(flow.deposit);
188
+ const prettyOwedDeposit = ethers.utils.formatUnits(flow.owedDeposit);
189
+ console.log(`Stream being closed: last updated timestamp ${prettyTimestamp}, flowRate ${prettyFlowRate}, deposit ${prettyDeposit}, owedDeposit ${prettyOwedDeposit}`);
190
+
191
+ $("#flowData").text(`Stream being closed: last updated timestamp ${prettyTimestamp}, flowRate ${prettyFlowRate}, deposit ${prettyDeposit}, owedDeposit ${prettyOwedDeposit}`);
192
+
193
+ const res = await host.callAgreement(
194
+ cfaV1Addr,
195
+ cfaV1.interface.encodeFunctionData(
196
+ "deleteFlow", [tokenAddr, senderAddr, receiverAddr, "0x"],
197
+ ),
198
+ "0x"
199
+ );
200
+ console.log(`pending tx: ${res.hash}`);
201
+
202
+ const receipt = await connData.provider.waitForTransaction(res.hash);
203
+ $("#successMsg").text(`Closed in tx ${res.hash}`);
204
+ console.log(`receipt: ${JSON.stringify(receipt, null, 2)}`);
205
+ } catch(e) {
206
+ console.error(`closeStream failed with: ${JSON.stringify(e, null, 2)}`);
207
+ alert(`Error: ${JSON.stringify(e, null, 2)}`);
208
+ }
209
+ }
210
+ </script>
211
+ </body>
212
+ </html>
@@ -66,7 +66,7 @@
66
66
  { chainId: 100, hostAddr: "0x2dFe937cD98Ab92e59cF3139138f18c823a4efE7" }, // xdai-mainnet
67
67
  { chainId: 10, hostAddr: "0x567c4B141ED61923967cA25Ef4906C8781069a10" }, // optimism-mainnnet
68
68
  { chainId: 42161, hostAddr: "0xCf8Acb4eF033efF16E8080aed4c7D5B9285D2192" }, // arbitrum-one
69
- // { chainId: 43114, hostAddr: "0x0000000000000000000000000000000000000000" } // avalanche-C
69
+ { chainId: 43114, hostAddr: "0x60377C7016E4cdB03C87EF474896C11cB560752C" } // avalanche-c
70
70
  ];
71
71
 
72
72
  let connData = {}; // chainId, provider, userAddress, ...