@laborx/chronobank-timeholder-contracts
v0.1.1
Published
Chronobank TimeHolder and TIME-related smart contracts
Downloads
2
Readme
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-contracts
or
yarn add -D @laborx/chronobank-timeholder-contracts
Usage
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
TimeHolder
thenMultiEventsHistory
as eventsHistory will not work (limitation of nesteddelegatecall
invocation)
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
TimeHolder
smart contract with basic functionality: get balance, get wallet address, etc. TimeHolderDepositable
extension library - provides an access to deposits, withdrawals and shares managementTimeHolderLockable
extension 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
TimeHolderDepositable
andTimeHolderLockable
smart 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 instantiatedOwnedUpgradeabilityProxy
to initalize it. - Deploy
OwnedUpgradeabilityProxy
and provide addresses ofTimeHolder
library and initialization data - Use deployed
OwnedUpgradeabilityProxy
withTimeHolder
's interface. - call
TimeHolder.init()
- call
TimeHolder.setExtensionContracts()
and provided deployed libraries (depositable and lockable smart contracts)
TimeHolder without proxy
- Deploy
TimeHolder
with storage and crate for it - call
TimeHolder.init()
- call
TimeHolder.setExtensionContracts()
and provided deployed libraries (depositable and lockable smart contracts)