GithubHelp home page GithubHelp logo

isabella232 / decentraland-eth Goto Github PK

View Code? Open in Web Editor NEW

This project forked from decentraland/decentraland-eth

0.0 0.0 0.0 1.58 MB

DEPRECATED - Ethereum common helpers for Decentraland

Home Page: https://decentraland.github.io/decentraland-eth/

License: Apache License 2.0

Shell 2.39% TypeScript 95.57% JavaScript 2.04%

decentraland-eth's Introduction

⚠️ DEPRECATED - This repository is no longer maintained


Ethereum Commons semantic-release

Ethereum

Set of utility functions to work with the Ethereum blockchain.

Calling eth.connect() should be enough to get you going. If you want to customize this this behaviour, you can check the breakdown below.

Implementations for all important Decentraland contracts live on the /contracts folder. An example of its use can be found below.

index.js

Main API to interface with web3. Acts as a global singleton and must be connected before calling any other method

import { eth } from 'ethereum'
import { Contract } from 'Contract'

const abi = [
  {
    name: 'method',
    type: 'function'
  }
]

class SuperTokenContract extends Contract {
  constructor(address: string) {
    super(address, abi)
  }
}

const superTokenContract = new SuperTokenContract('0xdeadbeeffaceb00c')

eth.connect({
  contracts: [superTokenContract]
})

eth.fetchTxStatus('TX_HASH')

Contract

An interface to work with Ethereum contracts, takes care of decoding contract data and of calls/transactions.

import { Contract } from 'Contract'
import { abi } from './abis/MANAToken.json'

const contract = new Contract('0xdeadbeef', abi)

await contract.sendCall('allowance', sender, receiver)
await contract.transaction('lockMana', manaValue)

txUtils.js

A set of common utility functions to work with transactions

import { txUtils } from 'decentraland-eth'

const status = eth.fetchTxStatus('TX_HASH')

if (txUtils.isPending(status)) {
  // something
}

Putting it all together

The idea is to define your own Contracts and work with them using eth. A typical case is described below:

MANAToken.js

import { eth } from 'decentraland-eth'
import { abi } from './artifacts/MANAToken.json'

class MANAToken extends eth.Contract {
  constructor(address: string) {
    super(address, abi)
  }

  async lockMana(sender, mana) {
    return await this.transaction('lockMana', sender, mana, { gas: 120000 })
  }
}

export default MANAToken

On the start of your app, maybe server.js

import { eth, contracts } from 'decentraland-eth'

const manaToken = new contracts.MANAToken('0xdeadbeef' /*address*/)

eth.connect({
  contracts: [
    manaToken
    // ...etc
  ]
})

manaToken.lockMana()

Scripts

build

Build the lib for use

lint

Lint TS files with tslint and DCL linter rules

docs

Builds an static page with the JSDoc documentation

test

Run tests using mocha and chai

./test.sh

Release

We use semantic-release to automate the release process of this package. Every time we merge to master, the CI will run semantic-release and it will publish a new version of the package. It will determine the next version of the package and it will generate release notes from the commit messages. That's why we enforce the following format for commit messages:

type: message

or

type(scope): messages

for example

feature(Map): added zoom levels

We use husky and validate-commit-msg to enforce this format on every commit.

Continuous Deployment

If you have decentraland-eth as a dependency and you're deploying to a Linux system, you might run into an error like this one: commit 2dd8319 on CircleCI.

The error comes from the installation of node-hid, you need to have libusb available for it to work, and it's not present in all Linux systems.

You can see an example of a fix in this repos config.yml file.

node-hid is a dependency of ledgerco, which in turn is a dependency of ledger-wallet-provider, used by this lib.

decentraland-eth's People

Contributors

belohlavek avatar cazala avatar dependabot[bot] avatar eordano avatar fmiras avatar m-sossich avatar menduz avatar nachomazzara avatar nicosantangelo avatar

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.