@laborx/chronobank-timeholder-contracts v0.1.1
Chronobank TimeHolder smart contracts library
Provides TimeHolder and related smart contracts to manager TIME token
Install
Organized as npm package this smart contracts could be easily added to a project by
npm install -s @laborx/chronobank-timeholder-contractsor
yarn add -D @laborx/chronobank-timeholder-contractsUsage
Right before you decided to use them add this library to package dependencies and import any contract according to this pattern, for example:
import "@laborx/chronobank-timeholder-contracts/contracts/TimeHolder.sol";Library
Package provides Deployment module to manage smart contract deployment process. Look for more details in the interfaces.
import { Deployment as ChronobankTimeHolderDeployment } from "@laborx/chronobank-timeholder-contracts";
const timeHolder = await ChronobankTimeHolderDeployment.deployTimeHolder(/* ... */);⚠️ Need to know
- When using Proxy for
TimeHolderthenMultiEventsHistoryas eventsHistory will not work (limitation of nesteddelegatecallinvocation)
Details
TimeHolder as an independent smart contract could be setup by itself or with upgradeability proxy (see OwnedUpgradeabilityProxy at `@laborx/solidity-shared-contracts/contracts/OwnedUpgradeabilityProxy.sol)).
In either way TimeHolder smart contract's functionality is divided in several parts (extensions):
- root
TimeHoldersmart contract with basic functionality: get balance, get wallet address, etc. TimeHolderDepositableextension library - provides an access to deposits, withdrawals and shares managementTimeHolderLockableextension library - provides an accesss to locking and unlocking deposited shares
This is a neccessary separation of concern because of the size of TimeHolder smart contract.
Library setup
- Deploy both
TimeHolderDepositableandTimeHolderLockablesmart contracts
Proxy setup
- Deploy
TimeHolder(it will be used as a library) without any special setup - Prepare initialization data for
TimeHolder.initDelegatableTimeHolder()function. This data will be used to call this function in instantiatedOwnedUpgradeabilityProxyto initalize it. - Deploy
OwnedUpgradeabilityProxyand provide addresses ofTimeHolderlibrary and initialization data - Use deployed
OwnedUpgradeabilityProxywithTimeHolder's interface. - call
TimeHolder.init() - call
TimeHolder.setExtensionContracts()and provided deployed libraries (depositable and lockable smart contracts)
TimeHolder without proxy
- Deploy
TimeHolderwith storage and crate for it - call
TimeHolder.init() - call
TimeHolder.setExtensionContracts()and provided deployed libraries (depositable and lockable smart contracts)
6 years ago