'블록체인'에 해당되는 글 2건

  1. 2019.03.05 온톨로지 블록체인
  2. 2018.07.15 Ethereum dApp - Dev Environment

온톨로지 블록체인은 중국에서 Neo기반으로 만들어진 블록체인으로서,

대규모의 투자유치를 한 것으로 유명하다.


온톨로지의 특징을 살펴보면 다음과 같다. (참고: 영문개발자 사이트)



1. VBFT 알고리듬을 사용한다.    

   BFT계열의 알고리즘들은 DCS (Decentralize, Consensus, Scale) 중에 SC를 취한 방식이다.

   즉, 속도가 빠르고 정합성도 좋지만 노드의 수는 작은 편이다.  

   그 중  PBFT는 전체 노드의 동의가 아닌 일부노드(2/3)의 동의로 합의한다.   (pbft 상세)

   온톨로지의 VBFT는  VRF(Vertifiable Random Function)와 BFT를 결합한 것이다.

   - 즉 BFT이지만 랜덤의 특성을 통해 합의알고리듬의 공정성을 보장한다.


2. 개발환경 

  - Solo Chain 제공 : 이더리움의 ganache 클라이언트와 같은 개발용 블록체인이다. 모양도 비슷하다.


  - dAPI  :  이더리움의 web3와 유사한 js 기반 


  - cyano Wallet :  메타마스크와 유사하다. android와 ios버전이 벌써 존재하는 점은 이더리움보다 빠르다.
     (NEO와 ONT 계좌가 지원된다 : ONT는 암호화폐, ONG는 GAS)


  - SmartX라는 스마트컨트랙트 개발툴 지원.


  - Ontology Client : 이더리움의 geth Client 라고 보면 됨.


  - 스마트컨트랙트는 python, 부수적으로는 C#


  - Punica 슈트: dApp개발 framework. 

     = Punica CLI (punica-python, punica-typescript)  : 이더리움의 truffle과 유사. 

        + Punica BOX (tutorialtoen-box, tokenexchange-box, oep4-box) 

        + Solo Chain 



3.온톨로지 기본 소개

온톨로지 소개:

- 퍼블릭, OnChain이라는 솔루션기업이 중국정부최초인가 업체

- OnChain아래 Neo와 온톨로지.

- Neo의 댑으로 시작했다가, 온톨로지 플랫폼으로 작년에 메인넷 론칭.

- 대표:다홍페이-네오대표, 리준(리쥔). 코파운더

- 분산신원인증 체계를 독보적으로 보유하고 있음. ONT ID가 대표적.

   (개인, 사물, 인증을 ID 밑으로 연동해서 DATA공유 플래폼을 목표로 함.), 알리바바 결제는 엔트파이넨셜이 운용.

   데이터 주권을 개개인으로 이동.

   데이터를 필요로 하는 사람들에게는 DDFD로 전달하게 됨.

   

- ONG라는 가스. 0.01 ONG로 고정되어 있음. 10원정도. 

- dApp은 30여개.  한국은 무비블록, 뮤지카(는 돌고 있음)


- OEP4(ERC-20), OEP5 (NFT) 토큰 존재  --> 두개특성 섞은 OEP-8

- 실제 6000 TPS 수준 (EOS는 3천)


- 한국파트너: Hashed가 노드운영. 체인어스


- incentive 모델 A (가스비 50% 리턴), B (top 50위에 들면 ONT를 줌.)

  C (대출, 70%개발시 반, 완료시 반 대출)

  D (기술 마케팅 서포트)

- HyperDragons Go 게임 론칭시 이벤트등도 지원해줬다


Posted by yongary
,

제목: truffle과 ES6 javascript를 이용한, 이더리움 dApp 개발환경 : 



Explanation - ENG

  • BaseContract (below) is base class when making javascript Contract using truffle & ES6-javascript
  • This can be used when using several ES6-javascript like Vue.js, Angular.js and react.js
  • When developing Ethereum dApp, this class helps to map functions between Solidity and Javascript, and helps web3 process of MetaMask and etc.
  • Detail using example can be found on https://github.com/yongarykim/RSTdAppDevEnv/tree/master/react-frontend/src/contracts


Explanation - KOR

  • truffle을 이용해서 javascript contract를 개발할 때, 상속받아서 쓰도록 만든 기본 class이다.
  • 각종 ES6-javascript language에서 아래 BaseContract를 상속을 받아서 이더리움 dApp개발시 사용할 수 있다.
  • 이더리움 dApp개발시 간단히 solidity의 함수와 js 함수간 매핑하도록 도와주며, metaMask 등의 web3처리를 자동으로 해준다. 자세한 사용예제는 https://github.com/yongarykim/RSTdAppDevEnv/tree/master/react-frontend/src/contracts 를 참고하도록 한다.


소스:  https://github.com/yongarykim/ES6-ContractBase


/**
* BaseContract - super class of all contracts (using Web3 & TruffleContract)
*
* <History>
* @author Yong Kim (yongary.kim@gmail.com)
* @date 2018.4.5 - first created
* @date 2018.6.11 - promisify & getMyAccount added
* @date 2018.6.13 - contractDeployed added.
*
*/

import Web3 from 'web3';
import TruffleContract from 'truffle-contract';
import $ from 'jquery';
import { Subject } from 'await-notify';

//web3함수를 Promise로 만들기 위한 공통모듈
const promisify = (inner) =>
new Promise((resolve, reject) =>
inner((err, res) => {
if (err) { reject(err) }
resolve(res);
})
);

export default class BaseContract {

constructor() {
this.contract = {};
this.initWeb3();
//contract.deployed()가 initContract 보다 빨리 호출되는 경우용
this.eventWaiting = new Subject();
}

initWeb3() {
// Metamask
console.log("this.web3:")
console.log(this.web3);
console.log("window.web3:")
console.log(window.web3);

if (typeof window.web3 !== 'undefined') {
this.web3 = new Web3(window.web3.currentProvider);
} else {
//LocalTest set the provider you want from Web3.providers
console.log("initWeb3: local");
this.web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
}
console.log(this.web3);
}

/* new 이후에 호출 필요 */
initContract(contractJson) {

let self = this;
$.getJSON(contractJson, function (data) {
// Get the necessary contract artifact file and instantiate it with truffle-contract
let contractArtifact = data;

console.log('initContract:' + self.contract);

self.contract = TruffleContract(contractArtifact);
self.contract.setProvider(self.web3.currentProvider);

console.log('initContract out');
self.eventWaiting.notify(); //contractDeployed가 먼저 불렸을 경우 대비.
});
}

/* contract관련 check함수 */

/**
* contractDeployed
* - same as contract.deployed,
* But waiting initContract to finish
* - useful when doing something on screen loading..
* */
contractDeployed = async () => {

console.log('in contractDeployed:');
if (Object.keys(this.contract).length === 0 ) {//contract Empty = initContract수행중
console.log(this.contract);

while (true) {
await this.eventWaiting.wait();
console.log('initContract Done');
break; //exit when notified.
}
}
console.log('out contractDeployed:');
return this.contract.deployed().then((instance) => {return instance;});

}


/* web3/eth Basic함수들 - eth의 sync함수는 값을 못 읽어 오는 경우가 발생가능하므로 async함수를 써야 함. */

getMyAccount = async () => {
const accounts = await promisify(cb => this.web3.eth.getAccounts(cb));
return accounts[0]; //accounts Array의 0번째가 본인 account임.
}
}



부연설명


이더리움 dApp을 개발할 경우, truffle과 javascript를 이용해서 개발하는 게 편리하다.

특히, javascript를 ES6로 사용하면 상속을 쉽게 사용할 수 있기 때문에,

복잡한 dApp을 개발할 수 있는  밑거름이 된다. 

(아무 생각없이, html과 javascript, truffle을 섞어서 쓴다면 간단한 dApp을 만들고 나서

복잡한 dApp은 만들다가 포기하게 될 확률이 높아진다)

 

복잡하고 어려운 dApp을 개발하기 위해서는 건물의 기초공사부터 튼튼하게 해 놓듯이

ES6 javascript를 이용해서 javascript를 개발하기를 권장하고.

그래서, 그 때 도움이 될 class를 만들어 본것이다.


ES6- javascript의 상속을 사용할 수 있기 때문에 쉽게쉽게 truffle contract기반의

javascript contract가 생성이 가능하다. 


자세한 사용예제는  https://github.com/yongarykim/RSTdAppDevEnv/tree/master/react-frontend/src/contracts 



Posted by yongary
,