Skip to content

Instantly share code, notes, and snippets.

View nakajo2011's full-sized avatar

Yukishige Nakajo nakajo2011

View GitHub Profile
@nakajo2011
nakajo2011 / patricia_sampl_dump.js
Last active November 20, 2019 13:58
Simple Patricia Trie what showed in "Patricia Trie" in Ethereum wiki.
const BaseTrie = require('merkle-patricia-tree/baseTrie')
const TrieNode = require('merkle-patricia-tree/trieNode')
const toNibbleArray = (bytes) => {
let nibbles = []
bytes.forEach((b) => {
nibbles.push(parseInt(b / 16))
nibbles.push(b % 16)
})
return Buffer.from(nibbles)
@nakajo2011
nakajo2011 / faucet.js
Last active April 8, 2020 16:08
web3.js mock sample
const Web3 = require('web3')
const BLOCK_NUMBER_PER_DAY = 24 * 60 * 4
const contractJson = require('../../build/contracts/MyToken')
class Faucet {
constructor(address, fromAddress) {
this.provider = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"))
this.myToken = new this.provider.eth.Contract(contractJson.abi, address, {from: fromAddress})
}
@nakajo2011
nakajo2011 / faucet.spec.js
Created April 8, 2020 16:08
web3.js mocking sample unit test
const Faucet = require('../src/model/faucet')
const CONTRACT_ADDRESS = '0xadDf5bC8b45571D94e2FD46Bfb81f8dD6D6f9FA0'
const FROM_ADDRESS = '0x259de638f0d6d79dfa084a810c1356d4d575b62e'
describe('Faucet', function () {
describe('init', function () {
it('should be return instance', async () => {
const ins = new Faucet(CONTRACT_ADDRESS, FROM_ADDRESS)
expect(ins).toBeDefined()
@nakajo2011
nakajo2011 / faucet_with_provider.js
Created April 9, 2020 14:01
with provider for mock web3.js
const Web3 = require('web3')
const Faucet = require('./faucet')
const BLOCK_NUMBER_PER_DAY = 24 * 60 * 4
const contractJson = require('../../build/contracts/MyToken')
class FaucetWithProvider extends Faucet {
constructor(provider, address, fromAddress) {
super(address, fromAddress)
this.provider = new Web3(provider)
this.myToken = new this.provider.eth.Contract(contractJson.abi, address, {from: fromAddress})
@nakajo2011
nakajo2011 / 1.web3.js
Created April 9, 2020 14:24
mock web3.js using jest
/* Mock web3 as __tests__/__mocks__/web3.js */
// const web3 = jest.genMockFromModule('web3')
/* Mock web3-eth-contract */
let mockWeb3EthContract = function() {}
function __setMockContract(mock) {
mockWeb3EthContract = mock
}
let blockNumber = 0
@nakajo2011
nakajo2011 / SimpleDonationManager.sol
Last active May 27, 2020 10:50
Using immutable keyword
pragma solidity >=0.6.5;
contract SimpleDonationManager {
uint256 immutable minDonation = 42;
uint256 immutable maxDonation = calcMaxDonation();
address immutable owner;
constructor() public {
owner = msg.sender;
// Error: Immutables cannot be read in constructor.
// assert(minDonation <= maxDonation);
// Error: Immutables can only be assigned once.
@nakajo2011
nakajo2011 / miner_stop_test.js
Last active July 7, 2020 14:26
miner.stop test, but it happen error.
it('multi transfer in same block', async () => {
web3.extend({property: 'mine', methods: [{ name: 'start', call: 'miner_start', params:0}]})
web3.extend({property: 'mine', methods: [{ name: 'stop', call: 'miner_stop', params:0}]})
const instance = await MyERC20Token.new()
const beforeBlock = await web3.eth.getBlockNumber()
await web3.mine.stop()
// queued tx1
@nakajo2011
nakajo2011 / miner_stop_correct_test.js
Created July 7, 2020 14:25
arround freeze sendTransaction.
const pify = require('pify')
async function queueTransaction(from, to, value, nonce, gasLimit, data) {
const response = await pify(web3.currentProvider.send)({
jsonrpc: "2.0",
method: "eth_sendTransaction",
id: new Date().getTime(),
params: [
{
from: from,
@nakajo2011
nakajo2011 / PanicTest.sol
Last active February 24, 2021 01:15
GBEC 2021.02.25 sample code
pragma solidity >= 0.8.0;
contract CalledContract {
uint[] nums;
function onlyEven(uint256 a) external pure returns(uint) {
uint b = 300 / a;
require(b % 2 == 0, "Ups! Reverting");
return b;
@nakajo2011
nakajo2011 / ModExp.sol
Created March 16, 2021 10:26
ModExp sample on Solidity
pragma solidity ^0.8.1;
contract ModExpContracts {
address public constant modExpAddress = 0x0000000000000000000000000000000000000005;
bytes public _result;
function modExp(
uint baseLength,