We use Loyalty smart contract to keep track of points earned and redeem by a member of the Synergy Loyalty program. Besides, we hold for each Member a score on how loyal he or she is. It's designed to be upgradeable to support future features.
# Install package
$ npm install
# Start the Ethereum emulator
$ npx ganache-cli --gasPrice 0 -l 100000000 -m "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat"
# Then open a new terminal, first run the contracts migrations
$ px truffle migrate
# Last, run all the tests
$ npx truffle test
# Update your settings on truffle-config.js according your prouduction enviroment. e.g., mine was:
#
# production: {
# host: "localhost",
# port: 22000, // was 8545
# network_id: "*", // Match any network id
# gasPrice: 0,
# // gas: 10000000,
# type: "quorum" // needed for Truffle to support Quorum
# }
$ npx truffle migrate --network production
# Now, you can run tests into the production
$ npx truffle test --network production
The description of every structure is used by the Loyalty Contract.
Member (Participant): it is represents a buyer in the loyalty network.
| Type | Name |
|---|---|
| address | memberAddress |
| uint | points |
| bool | isRegistered |
Partner (Participant): it is represents a COOP company which offers discounts or perks in the loyalty network.
| Type | Name |
|---|---|
| address | partnerAddress |
| bool | isRegistered |
TransactionType (Enum): it is the type of transaction, a buyer either can earn or redeem points.
| Options |
|---|
| Earned |
| Redeemed |
PointsTransaction (Transaction): it is the description of every transaction in the loyalty network.
| Type | Name |
|---|---|
| uint | points |
| uint | timestamp |
| address | partnerAddress |
| address | memberAddress |
| TransactionType | transactionType |
RecoverAction (Wallet): in case of lost digital wallet we provide the option to recover your loyalty point, with this structure we keep track every recovery try.
| Type | Name |
|---|---|
| newMemberAddress | address |
| oldMemberAddress | address |
initialized(): return contract status.
initialize(address newAdministrator):
setScoreTimespan(uint256 scoreTimespan):
getScoreTimespan():
registerMember(address member):
registerPartner(address partner):
earnPoints (uint _points, address _memberAddress, address _partnerAddress):
usePoints (uint _points, address _memberAddress, address _partnerAddress):
recoverPoints (address _oldMemberAddress, address _newMemberAddress):
getLoyaltyScore(address _member):
transactionsInfoLength():
partnersInfoLength():
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
- This contract is based on IBM/loyalty-points-evm-fabric
This application is part of a project that has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 825268”.