Made with ❤️ by [XY - The Persistent Company] (https://xy.company)
Table of Contents
- Sections
- Title
- Short Description
- Long Description
- Security
- Install
- Usage
- Diviner Staking Walkthrough
- API
- Maintainers
- Contributing
- License
- Credits
A Simple Consensus Smart Contract library for all nodes in XYO
This package has been built to streamline the dApp build process for anyone ready to integrate XYO into their project. Especially crucial in this library are the XyGovernance
and XyStakingConsensus
contracts. The XyPayOnDelivery
contract is a solid example of the execution of all nodes in XYO, and is used with our Payable on Delivery Demo. The package contains contracts that are upgradeable (with the exception of the Parameterizer) so that you can fix security vulnerabilities and introduce new features without migrating all of the data unecessarily.
Install - Installation instructions if necessary Or this can be called Set Up if there are no installation steps
Requirements: Make sure that the developer has the resources needed
- In the command line go ahead and install using
npm
npx zos link dapp-scsc-solidity
- Run
Suggestions: Light or Stern suggestions as to what the developer should know prior to using or contributing to the project
- Familiarity with
- Solidity
- Web3
- Truffle
- Ganache
Requirements:
- Watch this video on staking a node in XYO
- Check out dApper
- dApper allows you to interact with the smart contracts from the scsc library on the browser
Suggestions:
- Follow the walkthrough below to familiarize yourself with the scsc in the dApper environment. This is a good starting point to understanding how our scsc interacts with XYO.
Walkthrough - If there is an example of how someone can utilize the repo you may include a walkthrough - optional
use this hash QmaHuJh3u5J4W8WYhJnfH1yZUWWwUaehsVLbUPMEd4ymqN
with the hash
https://dapper.layerone.co/settings/QmaHuJh3u5J4W8WYhJnfH1yZUWWwUaehsVLbUPMEd4ymqN
The contract will load, giving you access to the contracts through the contract simulator.
Once you have verified that you have enough balance to stake the diviner, select the XyStakingConsensus contract This contract stores all the stake of the network
Approve the stake for the Diviner in the XyERC20 contract (make sure that you have the address for the XyStakingConsensus) using the approve()
function.
Go through metamask to submit the transaction. You have now approved stake, let's keep going.
The diviner is represented by a Stakable token
-
Mint one token with your wallet address by selecting the XyStakableToken and the address below
-
Select the
mint()
function and paste your wallet address into thebeneficiary
field -
Confirm the transaction on metamask
This will produce one non-fungible token (ERC721). This is unique to this specific diviner.
Then select the tokenByIndex()
function and enter 0
for your token address.
Copy the token address, this is virtual id of your diviner
- Select the
stake()
function - Paste the diviner id into the stakee field
- enter an amount to stake (make sure it is in your approved limits!)
- Click
execute
note you are the staker, and the stakingId is the ledger of the stake that you have in the diviner
To check out the data of the stake, select the stakeData()
function, paste in the stakingId in the sole field.
You will now get a returned JSON object with your stake amount, the block it was staked on, the staker, and the stakee.
API - usually required, but can be optional if there is no API or if it is not ready see below for the API structure that you should follow
transfer
-
Sends a specific value of tokens from your XYO account to another
-
parameters
address _to
uint256 _value
transferFrom
-
Sends a specific value of tokens from one (not yours) XYO address to another XYO address
-
parameters
address _from
address _to
uint256 _value
-
returns
bool success
approve
-
Sets an allowance for tokens for another address check out our staking walkthrough for an example
-
parameters
address _spender
uint256 _value
-
returns
bool success
approveAndCall
-
Sets an allowance for tokens for another address with a notification for the other contract
-
parameters
address _spender
uint _value
bytes memory _extraData
-
returns
bool success
&approval notification with _value and _extraData
burn
-
destroys tokens
-
parameters
uint256 _value
-
returns
bool success
- Kevin Weiler
- Phillip Lorenzo
Contributing - Instructions on how to contribute including notices on pre-commit builds, best practices, and necessaruy steps prior to a pull request.
If you'd like to contribute to the SCSC as a developer or just run the project from source the directions below should help you get started.
First, clone the repository. And set the branch to the develop branch
git clone -b develop https://github.com/XYOracleNetwork/dapp-scsc-solidity
Then change working directory to that of the repository
cd dapp-scsc-solidity
Download dependencies
yarn install
After installing, go ahead and open in your favorite text editor, ours is Visual Studio Code
➜ dapp-scsc-solidity code .
Execute these truffle steps:
Set up a local Ganache instance
ganache-cli --port 8545 --deterministic < if you want to set the networkID --networkId idNumber>
Using the deterministic flag is a good way to keep consistent when in development
mode
keep this terminal window open!
In another terminal window (or tab)
Compile the contracts
truffle compile
Migrate the contracts
truffle migrate
You will see transactions for each contract in your Ganache instance and their addressess
Test the contracts
truffle test
Ganache will work again executing transactions while executing the unit tests.
Note if you did not compile
or migrate
, no worries, this command will do that for you.
We recommend testing after any revisions you make to contracts.
If you would like to know more about how the contracts are upgradeable, read the PROXY.md file.
Developers should conform to git flow workflow. Additionally, we should try to make sure every commit builds. Commit messages should be meaningful serve as a meta history for the repository. Please squash meaningless commits before submitting a pull-request.
MIT
Credits - required - This can include any third party libraries that you used that require a credit, and the exact sentence with graphic for XY
Package developed using ZeppelinOS
Made with ❤️ by [XY - The Persistent Company] (https://xy.company)