@laborx/solidity-eventshistory-contracts
v1.1.2
Published
Provides an access to an events history set of contracts
Downloads
29
Readme
Events History smart contracts library
Part of LaborX project. Organizes a set of smart contracts that can manage events emitting. Using this approach all events should have their own public function for emitting!
- EventsHistory - defines a contract that could allow or forbid events with definite signature and source;
- MultiEventsHistory - has less restrictions than EventsHistory, allows to filter events according to an authorized source;
- MultiEventsHistoryAdapter - base contract, other contracts should inherit from it to receive an ability to store events history contract as a separate address and redirect all events to provided contract.
Installation
Organized as npm package this smart contracts could be easily added to a project by
npm install -s solidity-eventshistory-lib
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 "solidity-shared-lib/contracts/MultiEventsHistoryAdapter.sol";
or
import "solidity-shared-lib/contracts/MultiEventsHistory.sol";
Details
Contracts that wants to use events history contract should go with a couple of rules:
- Define a contract that will hold events history address (it is recommended to inherit from _MultiEventsHistoryAdapter)
contract Manager is MultiEventsHistoryAdapter {
event LogManagerEvent(address indexed self, uint at);
//...
}
- Add a public function with event emitting action (_self() is a function from MultiEventsHistoryAdapter contract):
//...
function emitManagerEvent(uint _at) public {
emit ManagerEvent(_self(), _at);
}
//...
- In your business logic you should invoke event emitting with the next command:
//...
function actionExample() external returns (bool) {
//...
Manager(getEventsHistory()).emitManagerEvent(now);
return true;
}
//...
Since events history contract will be the source of events then to keep information who was the actual source you need to reserve one of the parameters for passing _self() together with event.
For more information and use cases look at tests.