SDK 도입과 활용에 대한 이해

  1. 왜 SDK 를 써야 하는가 ?
  2. iframe 을 사용하는 이유는 ?
  3. 부모창 측의 송수신 방법
  4. 자식창 측의 송수신 방법

1. 왜 SDK 를 써야 하는가 ?

CORS (Cross-Origin Resource Sharing) 비교적 최근 브라우져는 보안 상의 이유로 외부 출처의 컨텐츠를 가져오는데 제약을 둔다. 외부 사의 컨텐츠를 사용하는 중계서비스 의 특성상 이는 감수해야 할 이슈이며, 이를 회피하기 위해 외부사는 SDK를 사용하여 본 서버 와 통신을 한다.

2. iframe 을 사용하는 이유는 ?

중계서비스의 특성 상 외부 게임을 내부로 런칭 한다. 테두리에는 중계사, Portal 이 있고, 내부에 컨텐츠 웹게임이 노출되는 형태로 제공한다.

3. 부모창 측의 송수신 방법

부모창의 송수신

$(document).ready(function() {
    //addEventListener 로 자식창에서 발생하는 이벤트를 해당 function 으로 받겠다는 선언을 한다. 
    window.addEventListener('message', _receiveMessage, false);  
});

// 수신 :: 이벤트 발생시 실행시킬 callback function 을 지정한다.
    var _functions = {
        'matchedFunction' : _matchedFunction
    };
    function _receiveMessage(event) {
        var postMessageData = event.data;
        if (!postMessageData) {
            return;
        }
        var targetSrc = document.getElementById("gameIFrame").src;
        if (targetSrc === undefined || targetSrc.indexOf(event.origin) !== 0) {
            return;
        }

        var postMessageDataObject = _parseRequest(postMessageData, event.origin);

        if (!postMessageDataObject.header) {
            return;
        }

        var functionName = postMessageDataObject.header.functionType; // 호출할 function name
        _functions[functionName](postMessageDataObject); // 실행할 function
    }
    function _matchedFunction(postMessageData) {
        var ver = postMessageData.head.version;        
        $.ajax({
            url: "/sdk/" + ver,
            type: 'POST',
            data:JSON.stringify(postMessageData),
            dataType: "json",
            timeout: 5000,
            contentType: "application/json; charset=utf-8"
        }).done(function(response) {            
            document.getElementById("gameIFrame").contentWindow.postMessage(response, postMessageData.body.requestOrigin);
        }).fail(function(err) {
            console.log(err);
        });
    }

 // 송신 :: 서버를 호출해 받은 response 를 자식 iframe 에 전송한다. 
 document.getElementById("gameIFrame").contentWindow.postMessage(response, postMessageData.body.requestOrigin);

4. 자식창측의 송수신 방법

// 우선 sdk 를 import 한다
<script src="/js/sdk/sdk.js"></script>
    // 선언
    var sdk = new SDK();
    // 송신 :: startFunction의 parameter 에 송신할 정보를 넣는다.
    // 수신 :: callbackFunction 에 수신할 정보와 처리할 방법을 넣는다.
    sdk.startFunction(document.getElementById('param1').value, callbackFunction);  
    function callbackFunction(data, err) { 
        if (!err) {
            alert(data);
        }
    };


블로그 이미지

기계새

Java, Spring, iBatis, Maven, eclipse 개발관련 잡다한 메모공간입니다.

docker  를 활용한 private test net 운영

[구성]

#{ipaddr} 에 geth-contract-dev docker 구성. 

>sudo docker exec -it geth-contract-dev bash

> ./root/geth/geth-start.sh

[접속]

>geth attach rpc:http://{ipaddr:port}



'block-chain' 카테고리의 다른 글

docker 를 활용한 private test net 운영  (0) 2019.02.21
Solidity 정리  (0) 2019.01.30
블록체인 정리  (0) 2018.11.02
블록체인 용어 정리  (0) 2018.10.26
블로그 이미지

기계새

Java, Spring, iBatis, Maven, eclipse 개발관련 잡다한 메모공간입니다.

Solidity 정리

block-chain 2019.01.30 10:23


# Solidity 

- 동작방식

    - 트렌젝션별 각각의 스마트 컨트렉은 각자다른 state, logic 있다. binary 형태로 존재하며 EVM 의해 실행된다. 

    - tx smart contract 코드가 있으며 EVM 의해 실행된다. 해당 인자는 해당 트렌젝션에 보관된다.

    - 라인단위로 **gas** 소모 된다.

- 저장된 스마트 컨트렉은 트렌젝션을 조회 하면 모두 있다.

   - 민감정보를 쓰기에는 어려워 보인다. (개인정보, 계급별 수수료 비율 )

- EVM (Ethereum Virtual Machine)

  - 저장영역

    - storage

      - 모든 컨트렉에 있는 영역, 함수호출에 변하지 않지만 비용이 많이듬

      - 구조체, 변수 매핑타입 지역변수가 저장됨 (별도 선언 없을시)

    - memory

      - 일시적인 값을 저장, 외부함수 호출시 지워짐, 비용이 적게듬

      - 함수 인자가 저장됨 

      - 함수 내부에서만 사용할 있음 (밖에서 사용시 컴파일 에러)

    - stack

      - 지역변수 저장, 비용이 거의 안듬, 저장갯수가 한정적

      


## truffle 환경 셋팅

### truffle ? 

> 서양 송로 버섯 solidity 컴파일/배포를 쉽게 할수 있게 지원해주는 Framework

- 설치 (npm 설치 선행, mac 기준 데모)

    - https://truffleframework.com/docs/truffle/getting-started/installation

    - #npm install -g truffle


- 명령어 순서 (폴더/프로젝트 이동후)

  1. #truffle unbox metacoin

  2. #vi truffle.js [테스트넷 설정]

     - 테스트넷에 붙을 host, port, network_id 작성(수정) 한다.

     - [folder]/contracts/[some].sol solidity 파일을 작성한다.     

  3. #truffle compile  

     - ~/build/ 폴더에 컴파일된 파일이 생성된다.

  4. #truffle migrate




### **소수점을 지원하지 않는다! ** (..아직)


```

The main difference between floating point (float and double in many languages, more precisely IEEE 754 numbers) and fixed point numbers is that the number of bits used for the integer and the fractional part (the part after the decimal dot) is flexible in the former, while it is strictly defined in the latter. Generally, in floating point almost the entire space is used to represent the number, while only a small number of bits define where the decimal point is.

[파파고]

부동 소수점(많은 언어의 플로트와 더블, IEEE 754 숫자) 고정점 번호의 주요 차이점은 정수와 부분 부분 부분(십진수 뒤의 부분) 사용되는 비트의 수가 전자에서 유연하지만 후자에서 엄격히 정의된다는 것이다. 일반적으로 부동 소수점에서는 소수점 위치를 정의하는 반면, 거의 전체 공간은 숫자를 나타내기 위해 사용된다.

```




## solidity 작성


- ERC20 토큰 방식을 따른다.

  - https://theethereum.wiki/w/index.php/ERC20_Token_Standard

- 언어 특징 : 완전한 언어를 꿈꾸며 보수적으로 시작하였으나 현재 (0.5.~) 버전에서는 이것저것 붙이고 있다.

  - 처음에는 for 문도, string 자료형도 없었다.

- 작성법 

  - public private

  - function event 

  - uint uint8 uint256 address string bool byte bytes32

  - struct - 구조체 , 선언 위치에 따라서 storage, memory 할당

  - for while - 반복문 

  - require - 예외처리 ex. assert

  - mapping - key, value 이루어진 해쉬 테이블 

  - enum

  - 전송 - address

    - address 확장자로 선언된 인자에 transfer 콜해서 사용한다.

    - transfer - (send > deprecated)

    



## 사용할 있는 블록 트렌젝션  

Block and Transaction Properties

block.blockhash(uint blockNumber) returns (bytes32): hash of the given block - only works for 256 most recent blocks excluding current

block.coinbase (address): current block miner’s address

block.difficulty (uint): current block difficulty

block.gaslimit (uint): current block gaslimit

block.number (uint): current block number

block.timestamp (uint): current block timestamp as seconds since unix epoch

gasleft() returns (uint256): remaining gas

msg.data (bytes): complete calldata

msg.gas (uint): remaining gas - deprecated in version 0.4.21 and to be replaced by gasleft()

msg.sender (address): sender of the message (current call)

msg.sig (bytes4): first four bytes of the calldata (i.e. function identifier)

msg.value (uint): number of wei sent with the message

now (uint): current block timestamp (alias for block.timestamp)

tx.gasprice (uint): gas price of the transaction

tx.origin (address): sender of the transaction (full call chain)




'block-chain' 카테고리의 다른 글

docker 를 활용한 private test net 운영  (0) 2019.02.21
Solidity 정리  (0) 2019.01.30
블록체인 정리  (0) 2018.11.02
블록체인 용어 정리  (0) 2018.10.26
블로그 이미지

기계새

Java, Spring, iBatis, Maven, eclipse 개발관련 잡다한 메모공간입니다.