Giter Site home page Giter Site logo

haechi-labs / vvisp Goto Github PK

View Code? Open in Web Editor NEW
86.0 24.0 25.0 2.33 MB

A Smart Way to Operate Smart Contracts on EVM Based Blockchains like Ethereum

License: MIT License

JavaScript 83.67% HTML 1.89% Shell 2.24% Solidity 11.94% Dockerfile 0.26%
smart-contracts blockchain cli solidity dapp-service vvisp vvisp-utils vvisp-cli haechi abi

vvisp's Introduction

vvisp

Korean version: README-ko.md

CircleCI NPM Coverage Status standard-readme compliant Conventional Commits lerna

The easiest smart contract development framework and command line interface on EVM based blockchain.

Simple and fast smart contract deployment and execution with a single command line

VVISP is sponsored by the EF(Ethereum Foundation). EF gave the grants to HAECHI LABS at ethcon korea 2019.

Key Benefits

  • Improving Environment of Blockchain Service Development
  • Reducing Operation Time of Blockchain Service Development
  • Shortening the Learning Curve of Developers Who Are Not Familiar with Blockchain

Table of Contents

Description

CLI tool easy to use for developers who are not familiar with blockchain.

: Smart contracts in the blockchain are uncommon development areas. There are many things that developers are unfamiliar with DApp development. Even if you create a contract by referring to several references, there is an entry barrier to learn how to deploy and how to use smart contracts. vvisp is a command line interface (CLI) tool designed to reduce the learning curve.

(1) Deploying a contract with a single line of command

: Deploying smart contracts to a blockchain is very complex. In order to deploy a contract, you must write your smart contract deployment codes as well as create smart contracts. A developer needs to consider deploying multiple smart contracts in order for DApp. vvisp defines deployment target as a simple configuration file and then deploys smart contracts by considering the dependencies automatically with a single line of command instead of hundreds lines of code.

(2) Executing the contract function with one command line

: Developers had to study the library, call the function, and manually write the function call code to execute the function of a contract. This is a big entry barrier for developers who are unfamiliar with smart contract development. However, vvisp is designed to execute a specific function of a contract with a single command line and to receive results without complex processes.

Contributors: Please see the Contributing section of this README.

Install

Install Node.js first. Then, install npm and

$ npm install -g @haechi-labs/vvisp

or install yarn and

$ yarn global add @haechi-labs/vvisp

Usage

If you want to see sample repository, see here.

1. Start your project

$ vvisp init my-project
$ cd my-project

$ npm install #or yarn install

You don't have to do $ npm init or $ truffle init. We supports environment for truffle and it will make package.json automatically.

See details for $ vvisp init.

2. Make your Contracts at contracts/

Now, you can use gen-script, compile and flatten commands.

3. Set vvisp-config.js file

Please set environment variables in vvisp-config.js file.

Example

const MNEMONIC = 'YOUR_MNEMONIC';

module.exports = {
  networks: {
    development: {
      url: 'URL_TO_ETHEREUM_NODE',
      gasLimit: 6721975,
    }
  },
  compilers: {
    solc: {
      version: '0.5.8'
    }
  },
  from: { // or from: 'YOUR_PRIVATE_KEY'
    mnemonic: MNEMONIC,
    index: 0
  },
};

See more information at here for more information about vvisp-config.js. Now you can use deploy-contract command.

4. Set service.vvisp.json file

Please set information about your DApp service in service.vvisp.json.

Example

{
  "serviceName": "Haechi",
  "variables" : {
    "exampleVarName": 123
  },
  "contracts": {
    "ContractKeyName1": {
      "path": "./contracts/Contract1.sol",
      "name": "Contract1",
      "constructorArguments": [
        "${contracts.ContractKeyName1.address}",
        "${variables.exampleVarName}"
      ],
      "initialize": {
        "functionName": "initialize",
        "arguments": ["argument1", "argument2"]
      }
    },
    "ContractKeyName2": {
      "path": "./contracts/Contract2.sol",
      "name": "Contract2",
      "initialize": {
        "functionName": "initialize",
        "arguments": ["argument1", "argument2"]
      }
    }
  }
}

See more information at here for more information about service.vvisp.json. Now you can use deploy-service command.

Please see CONFIGURATION.md to configure your project.

Run $ vvisp --help for more details about functions of vvisp.

Commands

Please see linked documentation below:

  • init: Start your project
  • compile: Compile solidity contract files
  • deploy-contract: Deploy contract
  • deploy-service: Deploy service of your contracts
  • gen-script: Generate javascript APIs interacting with smart contract on blockchain
  • console: Provides a console environment that can invoke contracts interactively
  • flatten: Flatten several contract files in one file

Architecture

vvisp communicates with main-net, test-net through rpc, and helps to develop, upgrade, test, compile and control the user’s current version of the DApp service. vvisp supports truffle test framework.

  • vvisp

    vvisp consists of vvisp-utils and vvisp.

    • vvisp-utils

      vvisp-utils provides several useful functions for use with vvisp or vvisp-sample.

    • vvisp

      vvisp performs the core logic of vvisp.

  • vvisp-sample

    vvisp-sample is the boilerplate package generated by vvisp init command.

    • contractApis

      It is generated automatically by the vvisp gen-script command and provides a javascript library that allows you to easily execute deployed projects.

    • configuration

      These are the configuration files needed for vvisp to work and test such as vvisp-config.js, service.vvisp.json, state.vvisp.json

    • test

      These are test cases of user-written contracts.

    • contracts

      The contracts that the user write himself.

Contributing

Thank you for considering to join this project! We always welcome contributors :)

Notes on project main branches:

  • master: Stable, released version
  • dev: Work targeting stable release

To contribute, please see CONTRIBUTING.md.

Contact

License

MIT

vvisp's People

Contributors

cloudinertia avatar hexoul avatar jason-haechi avatar jhchoy avatar junbeomlee avatar leekt avatar nipol avatar nujabes403 avatar sykim0225 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vvisp's Issues

autogenerate api server interface for genScript

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ v ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

only supports server-side/client-side execution scripts.

Expected behavior

also supports http api endpoint interface.

e.g.

GET
//Transfer?to=...&value=100

or

POST
//Transfer
body
to:xxx
value:200

Bug: node_modules library error at compiling

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

When we compile a contract which imports external library like openzeppelin-solidity, compiler couldn't find it.

Expected behavior

Compile it successfully.
Figure out findImports() in vvisp-utils/src/compile.js.
Search with flatten(it works properly with external library)

Environment


vvisp version: v0.1.9

gen-script should receive directory

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

gen-script only receives file path.

Expected behavior

It should receive directory path and get all sol files in there.

Prettier Compiler Warning

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ v ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

current compiler warning looks like this

{ component: 'general',
  formattedMessage:
   './packages/vvisp-utils/contracts/SecondB.sol:5:25: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n    function initialize(address _token, address _owner, address _addressA) public {\n                        ^------------^\n',
  message:
   'Unused function parameter. Remove or comment out the variable name to silence this warning.',
  severity: 'warning',
  sourceLocation:
   { end: 84,
     file: './packages/vvisp-utils/contracts/SecondB.sol',
     start: 70 },
  type: 'Warning' }
{ component: 'general',
  formattedMessage:
   './packages/vvisp-utils/contracts/SecondB.sol:5:41: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n    function initialize(address _token, address _owner, address _addressA) public {\n                                        ^------------^\n',
  message:
   'Unused function parameter. Remove or comment out the variable name to silence this warning.',
  severity: 'warning',
  sourceLocation:
   { end: 100,
     file: './packages/vvisp-utils/contracts/SecondB.sol',
     start: 86 },
  type: 'Warning' }
{ component: 'general',
  formattedMessage:
   './packages/vvisp-utils/contracts/SecondB.sol:5:57: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n    function initialize(address _token, address _owner, address _addressA) public {\n                                                        ^---------------^\n',
  message:
   'Unused function parameter. Remove or comment out the variable name to silence this warning.',
  severity: 'warning',
  sourceLocation:
   { end: 119,
     file: './packages/vvisp-utils/contracts/SecondB.sol',
     start: 102 },
  type: 'Warning' }
{ component: 'general',
  formattedMessage:
   './packages/vvisp-utils/contracts/SecondB.sol:5:5: Warning: Function state mutability can be restricted to pure\n    function initialize(address _token, address _owner, address _addressA) public {\n    ^ (Relevant source part starts here and spans across multiple lines).\n',
  message: 'Function state mutability can be restricted to pure',
  severity: 'warning',
  sourceLocation:
   { end: 156,
     file: './packages/vvisp-utils/contracts/SecondB.sol',
     start: 50 },
  type: 'Warning' }

Expected behavior

non JSON like warning.
I expect chalk-enabled beautiful log.

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

vvisp console: babel parse error

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

After vvisp init && vvisp compile && vvisp deploy-contract command, vvisp console throws following error:

❯ vvisp console
(node:34399) UnhandledPromiseRejectionWarning: SyntaxError: /Users/hoonilkim/work2/myDapp2/contractApis/back/index.js: Unexpected token (9:4)
   7 |   return {
   8 |     config: setters.config,
>  9 |     ...loadApis()
     |     ^
  10 |   };
  11 | };
  12 | 
    at Parser.pp$5.raise (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:4454:13)
    at Parser.pp.unexpected (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:1761:8)
    at Parser.pp$3.parseIdentifier (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:4332:10)
    at Parser.pp$3.parsePropertyName (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:4156:96)
    at Parser.pp$3.parseObj (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:4045:12)
    at Parser.pp$3.parseExprAtom (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3719:19)
    at Parser.pp$3.parseExprSubscripts (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3494:19)
    at Parser.pp$3.parseMaybeUnary (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3474:19)
    at Parser.pp$3.parseExprOps (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3404:19)
    at Parser.pp$3.parseMaybeConditional (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3381:19)
    at Parser.pp$3.parseMaybeAssign (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3344:19)
    at Parser.pp$3.parseExpression (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3306:19)
    at Parser.pp$1.parseReturnStatement (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:2078:26)
    at Parser.pp$1.parseStatement (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:1848:19)
    at Parser.pp$1.parseBlockBody (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:2268:21)
    at Parser.pp$1.parseBlock (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:2247:8)
    at Parser.pp$3.parseFunctionBody (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:4235:22)
    at Parser.pp$1.parseFunction (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:2386:8)
    at Parser.pp$3.parseFunctionExpression (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3760:17)
    at Parser.pp$3.parseExprAtom (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3722:19)
    at Parser.pp$3.parseExprSubscripts (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3494:19)
    at Parser.pp$3.parseMaybeUnary (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3474:19)
    at Parser.pp$3.parseExprOps (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3404:19)
    at Parser.pp$3.parseMaybeConditional (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3381:19)
    at Parser.pp$3.parseMaybeAssign (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3344:19)
    at Parser.pp$3.parseMaybeAssign (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3367:23)
    at Parser.pp$3.parseExpression (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:3306:19)
    at Parser.pp$1.parseStatement (/Users/hoonilkim/work2/myDapp2/node_modules/babylon/lib/index.js:1906:19)
(node:34399) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:34399) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Expected behavior

vvisp console should not throw an babel parsing error.

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

vvisp console should read proxy address when contract is upgradeable

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

image

"contracts": {
    "Haechi": {
      "upgradeable": true,
      "address": "0x806a5AF48fFf09E4e11041c8b80ec81896291a2a",
      "fileName": "HaechiV1.sol",
      "proxy": "0xb3d76b17ed24d32c2b335f4b94d734e94eff03c4"
    },
    "Gym": {
      "upgradeable": true,
      "address": "0xe9483CBF7FFCaAeA09BAb89363B309257fB511D5",
      "fileName": "HaechiGym.sol",
      "proxy": "0x37c86caa520225d40139e00a6e565bf8002999f3"
    }
  }

Expected behavior

When upgradeable property of contract is true, vvisp should read proxy property instead of address

Environment


vvisp version: v0.3.0


Environment:
- Node version: v10.15.0
- Operating system: MacOSX

Enhancement: Add the scripts for the test coverage for "init" command.

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

The solidity test coverage library exist, but there is not the scripts for executing the test coverage.

Expected behavior

Please add the scripts for the test coverage in the https://github.com/HAECHI-LABS/vvisp/tree/dev/packages/vvisp/referenceFiles/scripts.

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

Need a tutorial for abi-to-script

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ ] Feature request
[x] Documentation issue or request
[ ] Other... Please describe:

Current behavior

I could not use abi-to-script command easily after reading the Readme.

Expected behavior

After reading the Readme, i can easily use abi-to-script command

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.9


Environment:
- Node version:
- Operating system:

Others:

Give a choice to add Registry or not.

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Always add Registry.

Expected behavior

If someone write a property in service.vvisp.json like

registry: false

Do not add Registry.

Environment


vvisp version: v0.1.9


console show commands needs to print the type of method's args

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

show <contract> commands in vvisp console do not print the type of method's args

Expected behavior

show <contract> commands should print the type of method's args

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.10


Environment:
- Node version:
- Operating system: OSX

Others:

Need to change init package files

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

We need to change init package by vvisp init followed 1.0.0

Expected behavior

delete .env, add vvisp-config.js, upgrade to solidity 0.5.x

Allow to connect with customized blockchain link

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

We just can connect with infura or localhost.

Expected behavior

Allow to connect with export blockchian address like customized private network.

Minimal reproduction of the problem with instructions

Check out vvisp-utils/getWeb3.js

What is the motivation / use case for changing the behavior?

Want to connect with private blockchain.

Environment


vvisp version: v0.1.11


Environment:
- Node version: 10.15.0
- Operating system: Mac OSX


Warning at installation, and error in compile

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

When I install:

$ npm install -g @haechi-labs/vvisp
npm WARN deprecated [email protected]: 🙌  Thanks for using Babel: we recommend using babel-preset-env now: please read babeljs.io/env to update!
npm WARN deprecated [email protected]: ⚠️  WARNING ⚠️ tar.gz module has been deprecated and your application is vulnerable. Please use tar module instead: https://npmjs.com/tar
npm WARN deprecated [email protected]: Use mz or fs-extra^3.0 with Promise Support
/home/jinserk/.nvm/versions/node/v10.15.3/bin/vvisp -> /home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/bin/vvisp.js
+ @haechi-labs/[email protected]
updated 4 packages in 18.86s

and when compile:

$ vvisp init


                                                       
    `7MMF'   `7MF'`7MMF'   `7MF'`7MMF' .M"""bgd `7MM"""Mq. 
      `MA     ,V    `MA     ,V    MM  ,MI    "Y   MM   `MM.
       VM:   ,V      VM:   ,V     MM  `MMb.       MM   ,M9 
        MM.  M'       MM.  M'     MM    `YMMNq.   MMmmdM9  
        `MM A'        `MM A'      MM  .     `MM   MM       
         :MM;          :MM;       MM  Mb     dM   MM       
          VF            VF      .JMML.P"Ybmmd"  .JMML.     

        

@haechi-labs/vvisp v1.0.0
  The easiest smart contract development framework and command line interface on EVM based blockchain

Initializing Directory...
Success!

  Run vvisp -h for more information
  Clone git+https://github.com/HAECHI-LABS/vvisp.git for Contributing!

$ vvisp compile
Compiling...
compile contracts/Migrations.sol...
compile contracts/upgradeable/VvispRegistry.sol...
(node:5382) UnhandledPromiseRejectionWarning: Error: Module path, @haechi-labs/vvisp-contracts/upgradeable/VvispLibraryRegistry.sol is not found
    at module.exports (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/@haechi-labs/vvisp-utils/src/findImportPath.js:16:11)
    at findImports (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/@haechi-labs/vvisp-utils/src/compile.js:66:33)
    at Array.<anonymous> (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/solc/wrapper.js:18:20)
    at jsCall_viii (<anonymous>:1:1166126)
    at Array.bmb (<anonymous>:12:562020)
    at Array.ld (<anonymous>:6:4605)
    at Object.amb [as dynCall_viii] (<anonymous>:12:561968)
    at invoke_viii (<anonymous>:1:1165964)
    at Array.xw (<anonymous>:8:76782)
    at Object.Enb [as dynCall_viiii] (<anonymous>:12:568134)
    at invoke_viiii (<anonymous>:1:1167002)
    at ww (<anonymous>:8:72035)
    at Array.Bw (<anonymous>:8:92659)
    at Object.afb [as dynCall_ii] (<anonymous>:12:523902)
    at invoke_ii (<anonymous>:1:1160645)
    at Array.yd (<anonymous>:6:40211)
    at Object.amb [as dynCall_viii] (<anonymous>:12:561968)
    at invoke_viii (<anonymous>:1:1165964)
    at zd (<anonymous>:6:71252)
    at Ad (<anonymous>:6:74204)
    at ed (<anonymous>:6:2633)
    at ccallFunc (<anonymous>:1:8320)
    at <anonymous>:1:8626
    at runWithReadCallback (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/solc/wrapper.js:46:24)
    at compileStandard (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/solc/wrapper.js:83:14)
    at Object.compileStandardWrapper (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/solc/wrapper.js:90:14)
    at module.exports (/home/jinserk/.nvm/versions/node/v10.15.3/lib/node_modules/@haechi-labs/vvisp/node_modules/@haechi-labs/vvisp-utils/src/compile.js:32:10)
(node:5382) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:5382) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Expected behavior

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 1.0.0


Environment:
- Node version: 10.15.3
- NPM version: 6.9.0
- Operating system: Ubuntu 18.04

Others:

Add test codes of init

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[x] Other... Please describe: add testcode

Current behavior

There's no testcode of init.

Expected behavior

Add testcode of init

Environment


vvisp version: 0.1.8


Environment:
- Node version: 8.11.2
- Operating system: mac OSX

findImports at vvisp-utils/src/compile.js has unexpected behavior

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ v ] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

  • findImports function at compile.js
  function findImports(filePath) {
    const fileName = `${path.parse(filePath).name}.sol`;
    const foundPath = new ff(fineName);
    if ( foundPath.length > 0)
    {
        return {
          contents: fs.readFileSync(
            path.join('./', `${new ff(fileName)[0]}`),
            'utf8'
          )
        }
    }
  }

it uses node-find-folder package ( const ff = require('node-find-folder') ).
this package finds file's path only by name.
that is, even if we feed wrong filePath at findImports, it also works.

assume we have contracts folder like this,

contracts/
├── 1.sol
└── inner
└── 2.sol

if we call findImports('contracts/2.sol') which is wrong path,
findImports does work.

Expected behavior

throw error when findImports takes wrong filepath.

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

Bug: Always compile Proxy

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Always compile Proxy.

Expected behavior

If there is no upgradeable contract, do not compile Proxy.

Environment


vvisp version: v0.1.9

Bug: can't flatten contract which imports external modules

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Same as title

Expected behavior

Work properly

Environment


vvisp version: X.Y.Z

Need command line option config

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Expected behavior

-n, --network
--gasPrice
--gasLimit
--from
--configFile

should be added

Need Docs for 1.0.0

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ ] Feature request
[x] Documentation issue or request
[ ] Other... Please describe:

Current behavior

No information about vvisp-config.js
.env information is not needed now.

Expected behavior

Change information from .env to vvisp-config.js

find-cache-dir not defined at vvisp-utils

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ v ] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

raise error when compile

Cannot find module 'find-cache-dir'

Expected behavior

working properly

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

Bug: initialize of normal contracts does not resume properly

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Assume there are 2 contracts: SecondA.sol, SecondB.sol

  1. both of them have initialize functions
  2. stopped after initialize function of SecondA called
  3. resume
    => starts from initialize of SecondA

Expected behavior

=> starts from initialize of SecondB

Bug: Cannot parse input arguments when running deploy-contract

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

contract A {
  constructor(uint _input1[]) public {
    // logic
  }
}

We should run haechi deploy-contract A [1,2,3,4] to deploy this contract. However, it logs

(node:48508) UnhandledPromiseRejectionWarning: Error: expected array value (arg="_arguments", coderType="array", value="[1,2,3]")

It means it cannot parse string to array (it might be same at object)

Expected behavior

Parse string to array or object
We also have to divide cases into utilizing "[1,2,3,]" for string and for array.

Minimal reproduction of the problem with instructions

None

What is the motivation / use case for changing the behavior?

None

Environment


haechi-cli version: v0.1.0


Environment:
- Node version:v6.4.1
- Operating system: Mac

Need console command to call smartcontract api interactively

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

You need to create an javascript file to call contract api method using contractApis

Expected behavior

In the console, we can easily call contract api method

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: v0.1.10


Environment:
- Node version: v10.15.0
- Operating system: Mac OSX

Others:

Bug: Cannot change variables.owner when deploying nonUpgradeable contract with deploy-service

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

A.sol

contract A {
  constructor(uint _a, address _owner) public {
    //logic
  }
}

service.haechi.json

{
  "serviceName": "Example",
  "variables" : {
    "owner" : "0xb5F..."
  },
  "contracts": {
    "A": {
      "path": "contracts/A.sol",
      "constructorArguments": [
        1,
        "${variables.owner}"
      ]
    }
  }
}

Error logs:

Error: invalid address (arg="_addressB", coderType="address", value="${variables.owner}")

When we change order of input parameters to constructor(address _owner, uint _a), it works.

Expected behavior

'{variables.owner}' should be changed into "0xb5F..."

Minimal reproduction of the problem with instructions

None.

What is the motivation / use case for changing the behavior?

None.

Environment


haechi-cli version: v0.1.0


Environment:
- Node version: v6.4.1
- Operating system: Mac OS

Need a notice to upgrade vvisp

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

There is no notice for upgrading, so we don't know if we have latest version.

Expected behavior

Like npm, we need this kind of notification:
image

Environment


vvisp version: v0.1.10


Environment:
- Node version: 10.15.0
- Operating system: Mac OSX


Cannot control gas limit

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

We cannot control gas limit.

Expected behavior

Allow to control gas limit at .env.

Environment


vvisp version: v0.1.10


Environment:
- Node version: 10.15.0
- Operating system: Mac OSX



Need filter at vvisp-utils/getAllFiles

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

files = getAllFiles(path.join('./', 'contracts'));

This code returns all files in given path recursively.

Expected behavior

files = getAllFiles(path.join('./', 'contracts'), filePath => {
    if (rightLogic(filePath)) {
      return true;
    } else {
      return false;
    }
  });

Then, we can do "filtering".

Environment


vvisp version: v0.1.19


Environment:
- Node version: v10.15.0
- Operating system: Mac OSX



truffle-config should use 0x/sol-compiler as default

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[x] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

current truffle-config.json uses solc as default
but in documentation, it supports external compiler.
and solc compiles everything when there is no changes made,
@0x/sol-compiler would be better that it only compiles when there is change

Expected behavior

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

Coverage separation and needs to ignore some files

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Coverages of vvisp and vvisp-utils are separated, so coverall does not report coverage of whole packages.
Also, in vvisp, coverage reporter checks temporary generated files contractApis like below:
image

Expected behavior

  1. Unify coverages of each package
  2. Ignoring generated files in contractApis/ dir.

Environment


vvisp version: v0.3.0


Environment:
- Node version: 10.15.2
- Operating system: Mac OSX

Need to Error handling in console.js

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

If the user mistype the function name when using vvisp console, it prints out "TypeError: Cannot read property 'apply' of undefined" error msg.

Expected behavior

Need to some error handling.

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 1.0.0


Environment:
- Node version: v11.10.1
- Operating system: OS X 10.14.3

Others:

vvisp console does not show arguments of event emission

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

event Run(uint256 id, uint256 distance);
image

Expected behavior

Should show the arguments

Environment


vvisp version: 0.3.0


Environment:
- Node version: 10.15.0
- Operating system: Mac OSX

Add -v, --version feature

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Hard to check version of vvisp.

Expected behavior

$ vvisp -v
#or
$ vvisp --version
#then
v0.1.8

Environment


vvisp version: 0.1.8

Support solc v0.5.x

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

It doesn't support soldity 0.5.x and solc 0.5.x

Expected behavior

Successfully support it.

Environment


vvisp version: 0.1.9

Compile error: The version of openzeppelin's "pragma solidity" statement doesn't match with the version of VvispRegistry.sol

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

After initializing vvisp, vvisp compile command throws following error:

{ component: 'general',
  formattedMessage: 'openzeppelin-solidity/contracts/ownership/Ownable.sol:1:1: SyntaxError: Source file requires different compiler version (current compiler is 0.5.0+commit.1d4f565a.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version\npragma solidity ^0.5.2;\n^---------------------^\n',
  message: 'Source file requires different compiler version (current compiler is 0.5.0+commit.1d4f565a.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version',
  severity: 'error',
  sourceLocation: 
   { end: 23,
     file: 'openzeppelin-solidity/contracts/ownership/Ownable.sol',
     start: 0 },
  type: 'SyntaxError' }
{ component: 'general',
  formattedMessage: 'openzeppelin-solidity/contracts/math/SafeMath.sol:1:1: SyntaxError: Source file requires different compiler version (current compiler is 0.5.0+commit.1d4f565a.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version\npragma solidity ^0.5.2;\n^---------------------^\n',
  message: 'Source file requires different compiler version (current compiler is 0.5.0+commit.1d4f565a.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version',
  severity: 'error',
  sourceLocation: 
   { end: 23,
     file: 'openzeppelin-solidity/contracts/math/SafeMath.sol',
     start: 0 },
  type: 'SyntaxError' }

Expected behavior

vvisp compile command should compile Migrations.sol without an error.

Minimal reproduction of the problem with instructions

mkdir myDapp && cd myDapp && vvisp init && vvisp compile

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version: v8.11.3
- Operating system: OS X high sierra

Others:

.env whitespace error

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ v ] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

current reference .env is like below:
NETWORK=local

PORT=8545

INFURA_API_KEY=

Expected behavior

should run correctly

Minimal reproduction of the problem with instructions

vvisp deploy-contract contracts/ERC20.sol

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.2


Environment:
- Node version:v10.13.0
- Operating system: osx mojave

Others:

modified to get address according to fileName from state.vvisp.json

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

get address according to contract name from state.vvisp.json

Expected behavior

modified to get address according to file name from state.vvisp.json

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.11


Environment:
- Node version:
- Operating system: 0SX

Others:

Need integration test code for vvisp compile

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[x] Other... Please describe: Add test codes.

Current behavior

There is not test codes for $vvisp compile.

Expected behavior

Make integration test codes.

Environment


vvisp version: v0.1.10


Environment:
- Node version: v10.15.0
- Operating system: Mac OSX



unexpected behavior at vvisp-utils/src/compiler.js:findImports

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

findImports is dependency resolver while compile.
Current implementation use node-find-folder for find filepath of target contract.
But, node-find-folder's out often does not behave what we expect.

For example, assume we have follow directory tree

contracts/
MainContract.sol
lib/
Ownable.sol
external_folder/
Ownable.sol
And at MainContract,
import "./libs/Ownable.sol" -> here we might expect Ownable.sol would be at contracts/lib/Ownable.sol

But node-find-folder doesn't ensure that behavior, so that it has a chance to compile unexpected soruce file.

Expected behavior

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

Apply printOrSlient function in console.js

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

The intermediate output of the test case is output by console.log.

Expected behavior

When running the test case, hide the intermediate output by console.log

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.10


Environment:
- Node version:
- Operating system: OSX

Others:

Allow to set private key instead of mnemonic words in .env

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

Only mnemonic words and key index are allowed.

Expected behavior

At .env we can add

PRIVATE_KEY= 'key'

Minimal reproduction of the problem with instructions

Considering conflicts of mnemonic and private key

What is the motivation / use case for changing the behavior?

Environment


vvisp version: v0.1.11


Environment:
- Node version: 10.15.0
- Operating system: Mac OSX


Bug: writing double-quote(") in .env file doesn't work

Issue statement:
There is a problem using double-quote on .env file. Program cannot parse environment variable properly.

Bug Reproducing:
.env

MNEMONIC="apple bug bee ... "

current workaround: use single quote(')
.env

MNEMONIC='apple bug bee... '

Bug: No error occurs when executing command that does not exist

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

No error occurs when executing command that does not exist.
Example) vvisp abt-to-script contracts/HaechiV1.sol

Expected behavior

Error: command abt-to-script does not exist

Minimal reproduction of the problem with instructions

run vvisp abt-to-script contracts/HaechiV1.sol

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.9


Environment:
- Node version:
- Operating system:

Others:

add configuration file for vvisp

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ v ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

vvisp is cool development tool. but it "fix" many environment.
For example, vvisp force to use specific solidity compiler version.

Expected behavior

add config.vvisp.json file for support various settings. like truffle.

reference code:https://github.com/trufflesuite/truffle/blob/a1f749066cec3f1dd0eda92757846490955709f4/packages/truffle-compile/compilerSupplier.js

test/helper should be replaced with openzeppelin-test-helpers

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

currently, vvisp init generates test/helpers folder which is from older version of openzeppelin
since openzeppelin-test-helper module is very useful and has more features, it would be better for vvisp to use this.

Expected behavior

package.json includes "openzeppelin-test-helpers"
no more test/helpers
since just adding this will produce a lot of errors,
truffle has to be upgraded to version 5 or up

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: X.Y.Z


Environment:
- Node version:
- Operating system:

Others:

need a console command doc

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[ ] Feature request
[x] Documentation issue or request
[ ] Other... Please describe:

Current behavior

No docs for console

Expected behavior

docs for console

Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Environment


vvisp version: 0.1.10


Environment:
- Node version:
- Operating system: OSX

Others:

add tab compilation

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[v ] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

doesn't have any tab compilation

Expected behavior

for example,
vvisp deploy-c<tab> => vvisp deploy-contract
vvisp ab<tab> => vvisp abiToScript

I found related project
https://github.com/twolfson/commander-completion

Allow to add Registry in deployed no-registry service.

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

#33 => solved at #38
However, if you set registry property to false at first deployment time, you can not add Registry.

Expected behavior

Allow to add Registry in no-registry service.

Environment


vvisp version: v0.1.9


Environment:
- Node version: v10.15.0
- Operating system: Mac OSX



Need to change default registry option true => false

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

In service.vvisp.json, default value of registry is true.

Expected behavior

Change it to false.

What is the motivation / use case for changing the behavior?

There are more cases that service uses nonUpgradeable contracts.

Allow not writing initialize#arguments property in service.vvisp.json

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[ ] Performance issue
[x] Feature request
[ ] Documentation issue or request
[ ] Other... Please describe:

Current behavior

If we describe service.vvisp.json like:

  "ContractA": {
      "path": "path/to/your/Contract.sol",
      "initialize": {
        "functionName": "initialize"
      }
    }

It makes error! So we have to describe like:

  "ContractA": {
      "path": "path/to/your/Contract.sol",
      "initialize": {
        "functionName": "initialize",
        "arguments": []
      }
    }

Expected behavior

Allow the first describe.

Environment


vvisp version: v0.1.9


Environment:
- Node version: v8.11.2
- Operating system: Mac OSX

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.