2019년 2월 24일 일요일

Plasma Leap (leap-node, leap-core, leap-contracts 등) 구동 자동화


전체를 재구동 하는 일이 잦아 자동화 하였고, Eth 넣어주는 동작까지 잘 되는것을 확인하였습니다.

Base를 위한 자동화는
https://github.com/securekim/auto-leap
에 최신 버전이 있으니 참고하세요

먼저 auto-leap.js 의 METAMASK_ACCOUNT 는 본인의 METAMASK 계정으로 수정해야 합니다.

수정 이후 yarn add web3 한번 하고 auto-leap.sh 을 leap-node, leap-contracts 등이 있는 폴더 위에서 돌리면

truffle 실행, contract compile, contract deploy, node / bridge / remix, auto-leap.js 를 실행 해 줍니다.

이후 auto-leap.js 에서는 METAMASK 계정에 10 이더를 넣어주고

컨트랙트 주소, 계정 주소를 leap-node.log 에 출력해 줍니다.

※ 8545 로 동작하도록 해 두어 remix 에서 포트 수정할 필요가 없습니다.

cat auto-leap.js

const METAMASK_ACCOUNT = "0x9C73363B89C0Eda0dbA1B4a5250E891F60723378"; //바꾸세요

var Web3 = require("web3");
const fs = require('fs');

//const web3 = new Web3(Web3.givenProvider || 'ws://localhost:9545');//, options); //FOR CONSOLE
const web3 = new Web3(Web3.givenProvider || 'http://localhost:8545');//, options); //FOR TEST RPC


web3.eth.getAccounts((error, result) => {
web3.eth.sendTransaction(
{from:result[0],
to:METAMASK_ACCOUNT, //CHANGE IT (METAMASK)
value: "10000000000000000000",
data: "0xdf"
}, (err, transactionHash) => {
if (!err)
console.log(transactionHash + " success");
});

fs.appendFile('auto-leap.log', '\nTruffle Account :\n ' + result[0] + '\n', function (err) {
if (err) throw err;
console.log('Saved!');
});

fs.appendFile('auto-leap.log', '\nMetamask Account :\n ' + METAMASK_ACCOUNT + '\n', function (err) {
if (err) throw err;
console.log('Saved!');
});
});


cat auto-leap.sh
#!/bin/bash
sudo killall -9 node
sudo killall -9 sudo
cd leap-contracts
truffle networks --clean
clear
testrpc&
sleep 3
truffle compile
truffle migrate --reset
truffle networks > ../auto-leap.log
sed -i 's/undefined\:undefined/localhost\:8545/g' build/nodeFiles/generatedConfig.json
cd ../leap-node
node index.js --config=../leap-contracts/build/nodeFiles/generatedConfig.json&
cd ../leap-contracts
sudo remixd -s . --remix-ide "https://remix.ethereum.org"&
python -mwebbrowser https://remix.ethereum.org&
cd ../bridge-ui
yarn start&
sleep 5
python -mwebbrowser http://localhost:1234&
cd ..
node auto-leap.js

실행 위치를 위한 구조는 아래와 같습니다.

├── auto-leap.js     // Metamask 계정에 10 이더 넣어 줌
├── auto-leap.log  // 컨트랙트 주소, 계정 주소 알려줌
├── auto-leap.sh   // truffle 실행, contract compile, contract deploy, node / bridge / remix
├── bridge-ui
├── leap-contracts
├── leap-core
├── leap-node
├── node_modules


testrpc 설치가 필요합니다.

sudo npm install -g –production windows-build-tools 
sudo npm install -g ethereumjs-testrpc 


2019년 2월 9일 토요일

Javascript 배열 복사 (Deep copy, Shallow copy)


자바스크립트 변수 중 배열을 복사하는 것은 두가지 유형이 있습니다.

copyArr = originArr 로는 일반적으로 의도하는 Deep copy가 이루어 지지 않기 때문에, 아래를 참조하시기 바랍니다.

1. 참조

origin = [1,2,3];
var copy = origin;

copy 된 변수가 origin 을 가리키고 있는 상태입니다.
즉, copy 값이 변경되면 origin 도 함께 변경됩니다.

copy[1] = 5; // origin [1, 5, 3];

2. Shallow copy 

copy 된 변수의 값이 변경되어도 origin 은 변하지 않습니다.


Example


Speed

Deep copy 에서 가장 빠른것은 slice(0) 이므로 이것을 이용하면 되겠습니다.