From f5b5d139acebede7fc16419f177a2c34fe07203e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 25 Jan 2022 18:22:25 +0100 Subject: [PATCH] added killswitch for credential generation --- .../contracts/BandwidthGenerator.sol | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/contracts/basic-bandwidth-generation/contracts/BandwidthGenerator.sol b/contracts/basic-bandwidth-generation/contracts/BandwidthGenerator.sol index 215c4e5205..933a47974d 100644 --- a/contracts/basic-bandwidth-generation/contracts/BandwidthGenerator.sol +++ b/contracts/basic-bandwidth-generation/contracts/BandwidthGenerator.sol @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.10; import "./CosmosToken.sol"; @@ -9,10 +10,11 @@ import "@openzeppelin/contracts/utils/math/SafeMath.sol"; * @title BandwidthGenerator * @dev Contract for generating Basic Bandwidth Credentials (BBCs) on the Nym cosmos blockchain, * using ERC20 representations of NYM as payment. Utilises the Gravity Bridge for cross-chain payment. + * + * Credential generation can be switched on/off by the contract owner. * * Credentials represent a certain amount of bandwidth which can be sent through the Nym Mixnet. * By default 1 NYM = 1 GB of bandwidth. The `BytesPerToken` amount can be adjusted by the contract owner. - * * The amount of bandwidth bought is calculated according to the following formula: * `(Token amount in 'wei' / 10**18) * BytesPerToken` */ @@ -23,6 +25,7 @@ contract BandwidthGenerator is Ownable { CosmosERC20 public erc20; Gravity public gravityBridge; uint256 public BytesPerToken; + bool public credentialGenerationEnabled; event BBCredentialPurchased( uint256 Bandwidth, @@ -34,7 +37,16 @@ contract BandwidthGenerator is Ownable { event RatioChanged( uint256 indexed NewBytesPerToken ); - + + event CredentialGenerationSwitch( + bool Enabled + ); + + modifier checkEnabled() { + require(credentialGenerationEnabled, "BandwidthGenerator: credential generation isn't currently enabled"); + _; + } + /** * @param _erc20 Address of the erc20NYM deployed through the Gravity Bridge. * @param _gravityBridge Address of the deployed Gravity Bridge. @@ -45,6 +57,7 @@ contract BandwidthGenerator is Ownable { erc20 = _erc20; gravityBridge = _gravityBridge; BytesPerToken = 1073741824; // default amount set at deployment: 1 erc20NYM = 1073741824 Bytes = 1GB + credentialGenerationEnabled = true; } /** @@ -56,6 +69,15 @@ contract BandwidthGenerator is Ownable { BytesPerToken = _newBytesPerTokenAmount; emit RatioChanged(_newBytesPerTokenAmount); } + + /** + * @dev Switches credential generation on/off. Can only be called by Owner. + * @param _generation Whether credential generation is turned on/off. + */ + function credentialGenerationSwitch(bool _generation) public onlyOwner { + credentialGenerationEnabled = _generation; + emit CredentialGenerationSwitch(_generation); + } /** * @dev Function to create a BBC for account owning the verification key on the Nym Cosmos Blockchain @@ -65,7 +87,7 @@ contract BandwidthGenerator is Ownable { * @param _signedVerificationKey Number of erc20NYMs to spend signed by _verificationKey for auth on Cosmos Blockchain. * @param _cosmosRecipient Address of the recipient of payment on Nym Cosmos Blockchain. */ - function generateBasicBandwidthCredential(uint256 _amount, uint256 _verificationKey, bytes memory _signedVerificationKey, string calldata _cosmosRecipient) public { + function generateBasicBandwidthCredential(uint256 _amount, uint256 _verificationKey, bytes memory _signedVerificationKey, string calldata _cosmosRecipient) public checkEnabled { require(_signedVerificationKey.length == 64, "BandwidthGenerator: Signature doesn't have 64 bytes"); erc20.transferFrom(msg.sender, address(this), _amount); erc20.approve(address(gravityBridge), _amount);