@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.
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/build/contracts/AccessControl.json +1 -1
- package/build/contracts/AccessControlEnumerable.json +1 -1
- package/build/contracts/Address.json +1 -1
- package/build/contracts/AgreementBase.json +9 -9
- package/build/contracts/AgreementLibrary.json +4 -4
- package/build/contracts/BaseRelayRecipient.json +1 -1
- package/build/contracts/BatchLiquidator.json +165 -165
- package/build/contracts/BatchOperation.json +1 -1
- package/build/contracts/CFAv1Library.json +4 -4
- package/build/contracts/CallUtils.json +1 -1
- package/build/contracts/ClosingOnUpdateFlowTestApp.json +4 -4
- package/build/contracts/ConstantFlowAgreementV1.json +5 -5
- package/build/contracts/Context.json +1 -1
- package/build/contracts/ContextDefinitions.json +1 -1
- package/build/contracts/Create2.json +1 -1
- package/build/contracts/CustomSuperTokenBase.json +2 -2
- package/build/contracts/ERC165.json +1 -1
- package/build/contracts/ERC1820Implementer.json +1 -1
- package/build/contracts/ERC1820RegistryCompiled.json +1 -1
- package/build/contracts/ERC20.json +1 -1
- package/build/contracts/ERC20Burnable.json +1 -1
- package/build/contracts/ERC20Pausable.json +1 -1
- package/build/contracts/ERC20PresetMinterPauser.json +1 -1
- package/build/contracts/ERC20WithTokenInfo.json +1 -1
- package/build/contracts/ERC777Helper.json +1 -1
- package/build/contracts/ERC777RecipientDrainingGas.json +4 -4
- package/build/contracts/ERC777RecipientReverting.json +4 -4
- package/build/contracts/EnumerableSet.json +1 -1
- package/build/contracts/ExclusiveInflowTestApp.json +4 -4
- package/build/contracts/FixedSizeData.json +1 -1
- package/build/contracts/FlowExchangeTestApp.json +4 -4
- package/build/contracts/FlowOperatorDefinitions.json +1 -1
- package/build/contracts/FullUpgradableSuperTokenProxy.json +4 -4
- package/build/contracts/IAccessControl.json +1 -1
- package/build/contracts/IAccessControlEnumerable.json +1 -1
- package/build/contracts/IConstantFlowAgreementV1.json +1 -1
- package/build/contracts/IDAv1Library.json +4 -4
- package/build/contracts/IERC165.json +1 -1
- package/build/contracts/IERC1820Implementer.json +1 -1
- package/build/contracts/IERC1820Registry.json +1 -1
- package/build/contracts/IERC20.json +1 -1
- package/build/contracts/IERC20Metadata.json +1 -1
- package/build/contracts/IERC777.json +1 -1
- package/build/contracts/IERC777Recipient.json +1 -1
- package/build/contracts/IERC777Sender.json +1 -1
- package/build/contracts/IInstantDistributionAgreementV1.json +1 -1
- package/build/contracts/IMaticBridgedNativeSuperToken.json +2 -2
- package/build/contracts/IMaticBridgedNativeSuperTokenCustom.json +2 -2
- package/build/contracts/IMultiSigWallet.json +1 -1
- package/build/contracts/IPureSuperToken.json +2 -2
- package/build/contracts/IPureSuperTokenCustom.json +2 -2
- package/build/contracts/IRelayRecipient.json +1 -1
- package/build/contracts/IResolver.json +1 -1
- package/build/contracts/ISETH.json +2 -2
- package/build/contracts/ISETHCustom.json +2 -2
- package/build/contracts/ISuperAgreement.json +1 -1
- package/build/contracts/ISuperApp.json +2 -2
- package/build/contracts/ISuperToken.json +2 -2
- package/build/contracts/ISuperTokenFactory.json +2 -2
- package/build/contracts/ISuperfluid.json +425 -418
- package/build/contracts/ISuperfluidGovernance.json +2 -2
- package/build/contracts/ISuperfluidToken.json +1 -1
- package/build/contracts/ITOGAv1.json +1208 -1208
- package/build/contracts/ITOGAv2.json +1208 -1208
- package/build/contracts/Initializable.json +1 -1
- package/build/contracts/InstantDistributionAgreementV1.json +5 -5
- package/build/contracts/Int96SafeMath.json +1 -1
- package/build/contracts/MaticBridgedNativeSuperTokenProxy.json +191 -191
- package/build/contracts/NonClosableOutflowTestApp.json +4 -4
- package/build/contracts/Ownable.json +1 -1
- package/build/contracts/Pausable.json +1 -1
- package/build/contracts/Proxy.json +1 -1
- package/build/contracts/PureSuperToken.json +88 -88
- package/build/contracts/Resolver.json +90 -90
- package/build/contracts/SETHProxy.json +196 -196
- package/build/contracts/SafeCast.json +1 -1
- package/build/contracts/SafeERC20.json +1 -1
- package/build/contracts/SafeMath.json +1 -1
- package/build/contracts/SelfDeletingFlowTestApp.json +4 -4
- package/build/contracts/SlotsBitmapLibrary.json +1 -1
- package/build/contracts/Strings.json +1 -1
- package/build/contracts/SuperAppBase.json +2 -2
- package/build/contracts/SuperAppDefinitions.json +1 -1
- package/build/contracts/SuperToken.json +46 -46
- package/build/contracts/SuperTokenFactory.json +35 -35
- package/build/contracts/SuperTokenFactoryBase.json +33 -33
- package/build/contracts/SuperTokenFactoryHelper.json +35 -35
- package/build/contracts/SuperUpgrader.json +422 -422
- package/build/contracts/Superfluid.json +5488 -5454
- package/build/contracts/SuperfluidFrameworkDeployer.json +472 -472
- package/build/contracts/SuperfluidGovernanceBase.json +9 -9
- package/build/contracts/SuperfluidGovernanceConfigs.json +1 -1
- package/build/contracts/SuperfluidGovernanceII.json +17 -17
- package/build/contracts/SuperfluidGovernanceIIProxy.json +17 -17
- package/build/contracts/SuperfluidLoader.json +144 -144
- package/build/contracts/SuperfluidToken.json +1217 -1217
- package/build/contracts/TOGA.json +1218 -1218
- package/build/contracts/TestGovernance.json +171 -171
- package/build/contracts/TestToken.json +94 -94
- package/build/contracts/TokenCustodian.json +214 -214
- package/build/contracts/TokenInfo.json +1 -1
- package/build/contracts/UInt128SafeMath.json +1 -1
- package/build/contracts/UUPSProxiable.json +132 -132
- package/build/contracts/UUPSProxy.json +81 -81
- package/build/contracts/UUPSUtils.json +37 -37
- package/build/contracts-sizes.txt +7 -7
- package/contracts/interfaces/superfluid/ISuperfluid.sol +14 -6
- package/contracts/superfluid/Superfluid.sol +12 -10
- package/package.json +2 -2
- package/scripts/{deploy-unlisted-native-super-token.js → deploy-unlisted-pure-super-token.js} +4 -4
- package/scripts/gov-transfer-framework-ownership.js +3 -3
- package/scripts/libs/getConfig.js +3 -3
- package/utils/README.md +19 -1
- package/utils/stream-closer.html +212 -0
- 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
|
-
|
|
69
|
+
{ chainId: 43114, hostAddr: "0x60377C7016E4cdB03C87EF474896C11cB560752C" } // avalanche-c
|
|
70
70
|
];
|
|
71
71
|
|
|
72
72
|
let connData = {}; // chainId, provider, userAddress, ...
|