Giter Site home page Giter Site logo

eth's Introduction

Dark Forest Smart Contracts

Development Guide

Folder setup

All of our smartcontract related code are located in the /eth directory.

  • /eth/contracts contains the smartcontract code written in solidity
  • /eth/test contains the test for the smartcontract written in Javascript

Installing Core Dependencies

  • Node (v14.x OR v16.x)
  • Yarn (Javascript Package Manager)

Installing The Correct Node Version Using NVM

Dark Forest is built and tested using Node.js v14/v16 and might not run properly on other Node.js versions. We recommend using NVM to switch between multiple Node.js version on your machine.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
nvm install

After the installation is finished, you can run node --version to verify that you are running v14 or v16

Installing Yarn & Other Dev Dependencies

Refer to Yarn's official documentation for the installation guide.

After you have Yarn installed, run yarn to install dev dependencies:

Run Locally

To run the tests run yarn test

To deploy contracts locally, you'll need to run 2 commands:

  1. Start a node by running yarn hardhat:node
  2. Then (in another terminal) deploy contracts by running yarn hardhat:dev deploy --whitelist false

You can import the private key of one of the accounts hardhat node created and funded, which are printed when you started the node such as:

Account #2: 0x3097403b64fe672467345bf159f4c9c5464bd89e (100 ETH)
Private Key: 0x67195c963ff445314e667112ab22f4a7404bad7f9746564eb409b9bb8c6aed32

subgraph

Assuming you already have your contracts deployed be it on a local node or on a mainnet, you'll have the abi/DarkForest.json file, the CONTRACT_ADDRESS address, and the block the diamond contract was initialized at (so you dont waste time syncing from the genesis block) inside the @darkforest_eth/contracts packag. In development, the start block will be set at 0.

TheGraph hosted solution

For TheGraph hosted service, you need to create an account on thegraph.com, and create a subgraph using the web interface and note the namespace yourloginname/graphname. Find the access token for this graph (it should be on the top row of the interface), and run

graph auth https://api.thegraph.com/deploy/ <ACCESS_TOKEN>

in your terminal.

Then put the contract addresses into the templates and codgen thegraph files yarn subgraph:template:prod

Finally ask them to start the indexing yarn subgraph:deploy:prod yourloginname/graphname

local development

To run a local copy of thegraph make sure docker is installed and then run yarn start --subgraph df OR if you already have your contracts deployed and running run yarn hardhat:dev subgraph:deploy --name df and find your local hosted explorer at http://localhost:8000/subgraphs/name/df

eth's People

Contributors

actions-user avatar github-actions[bot] avatar gubsheep avatar

eth's Issues

Risks of having no limit on arena `bulkCreate` planets

This is ok for now, but in the future I think we need to set a cap on bulkCreate due to gas limit. With a quick test, gas is just under 500,000 per planet created. So with a block limit of 15,000,000, this gives us max 30 planets that can be created. We need to enforce this client side, otherwise users will face Exceeds block gas limit error and waste all of their funds.

Generate valid ABI and Typechain for anticipated Diamond Cut

The problems we have identified:

  1. If we have two functions with the same signature (example: initializePlayer in DFCore and initializePlayer in DFArena), we can't build the Diamond ABI due to the overlapping function check (strict = true).

  2. If we have two functions with the same name but different types, we have a problem with ethers where need to fetch the functions with await sampleContractEthers["overloading()"](); , which breaks most existing calls and tests that expect the standard sampleContractEthers.overloading() getter.

See #3 for proposed temporary solution.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.