A web3 adaptor for VeChain Thor RESTful HTTP API.

starsStars 61
forksForks 33
watchersWatchers 61
current-versionCurrent version v1.5.3
total-releasesTotal releases 20
open_issues_countOpen issues 2
dateFirst release 2018-08-10
dateLatest release 2020-09-27
updateLast update 2020-12-15

A web3 adaptor for VeChain Thor RESTful API.

Table of contents


npm install --save thorify
npm install --save [email protected]*  # Web3 is needed as dependency.


// ES6 style
import { thorify } from "thorify";
const Web3 = require("web3");		// Recommend using require() instead of import here

const web3 = thorify(new Web3(), "http://localhost:8669");

web3.eth.getBlock("latest").then(res => console.log(res));
// Best block info will be displayed

If you would like to write code in ES5, check below for the initialization code.

// ES5 style
const thorify = require("thorify").thorify;
const Web3 = require("web3");

const web3 = thorify(new Web3(), "http://localhost:8669");

web3.eth.getBlock("latest").then(res => console.log(res));
// Best block info will be displayed

Web3 method supported

web3 instance
├── eth
│   ├── getBlockNumber
│   ├── getBalance
│   ├── getStorageAt
│   ├── getCode
│   ├── getBlock
│   ├── getTransaction
│   ├── getTransactionReceipt
│   ├── sendTransaction
│   ├── sendSignedTransaction
│   ├── call
│   ├── estimateGas
│   ├── getPastLogs
│   ├── subscribe
│   ├── clearSubscriptions
│   ├── getEnergy
│   ├── getChainTag
│   ├── getBlockRef
│   ├── accounts
│   └── Contract
│       ├── Constructor(new Contract())
│       ├── clone
│       ├── deploy
│       ├── methods
│       ├──
│       ├── methods.myMethod.send
│       ├── methods.myMethod.estimateGas
│       ├── methods.myMethod.encodeABI
│       ├── events
│       ├── once
│       ├── events.myEvent
│       ├── events.allEvents
│       └── getPastEvents
└── utils

Send Transaction

In Thor official implementation , the client DOES NOT neither manage user's private-key/keyStore nor use private key to sign a Transaction. Unfortunately, thorify can not directly perform eth_sendTransaction but there is another way to sign a transaction.



API Reference

Play with multi-clause

  1. thor-devkit.js supports multi-clause and sign transaction
  2. send signed transaction using sendSignedTransaction

Which Stack Should I Choose Regarding Connex,Thorify And Web3-Gear

  • Connex: The standard interface to connect VeChain apps with VeChain blockchain and user.

Below is an reference when you are planning your technical stack:

Here are some most common scenarios:

  1. Develop a web application: Connex + Connex powered VeChain wallets
  2. Backend service in Node.js: Thorify + Web3
  3. Contract development in Truffle: Web3 + Web3-Gear
  4. Contract development in Remix-IDE: Web3 + Web3-Gear


How do I send VTHO token

VTHO is a token that compatible with VIP180(ERC-20), you can build a contract instance using web3 and do what ever you want.

Multi party payment protocol or sponsored contract

It's done by calling the functions of prototype contract, check wiki page for detailed info about prototype contract.

Method not supported

The RESTful API of Thor is different with Ethereum's JSON-RPC, therefore, there are some methods in web3 are not supported by thorify, feel free to open an issue discuss the features.


  • There are three special block number in Ethereum: earliest,latest,pending. In VeChain Thor, we introduced best block and there is no pending block, so they will be replaced with 0 (aka genesis), best, best


Currently, Thorify is compatible with [email protected]*.


DEBUG=thor:* ts-node index.ts 

ts-node index.ts can be replaced with command to run your code, this example is only for Node.js environment. For more detailed info, please refer to debug.


This project is licensed under the MIT license, Copyright (c) 2017 VeChain Foundation. For more information see