투석기의 네임스페이스 ID와 모자이크 ID의 도출 방법(Alpaca, Bison, Cow)

15490 단어 catapultBlockchainNEM

소개



투석기의 Cow에서 네임스페이스 ID와 모자이크 ID의 도출 방법이 바뀌었기 때문에 씁니다.

네임스페이스 ID



Alpaca, Bison



기본적으로 이름에서 파생됩니다.

예를 들어, nem의 네임스페이스 ID는 84B3552D375FFA4B입니다.
const nem2Sdk = require("nem2-sdk").NamespaceId;
const namespaceIdNem = new NamespaceId("nem");
console.log(namespaceIdNem.toHex().toUpperCase())
// 84B3552D375FFA4B

루트 네임스페이스의 경우 0000000000000000 와 이름을 결합하여 해시 값을 취합니다.

네임스페이스(nem)
const nem = "6e656d"
const id = calcurateHash(toLE("0000000000000000") + nem)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// 84B3552D 375FFA4B

서브네임스페이스의 경우 상위 네임스페이스 ID와 이름을 결합하여 해시 값을 취합니다.

서브네임스페이스(nem.catapult)
const catapult = "6361746170756C74"
const id = calcurateHash(toLE("84b3552d375ffa4b") + catapult)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// 1B558641 28318CF8

Cow



Alpaca, Bison과 거의 같습니다만, 최상위 비트가 반드시 1 가 되었습니다. 예를 들어, cat 의 네임스페이스 ID는 B1497F5FBA651B4F 입니다만, 방금전과 같이 계산하면, 31497F5FBA651B4F 가 됩니다.
0x310011 0001 이지만, 최상위 비트를 세우면 1011 0001 가 되어 0xB1 가 됩니다.

네임스페이스(cat)
const cat = "636174"
const id = calcurateHash(toLE("0000000000000000") + cat)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// 31497F5F BA651B4F
// 最上位ビットを立てると
// B1497F5F BA651B4F

서브네임스페이스도 마찬가지입니다.

서브네임스페이스(cat.harvest)
const harvest = "68617276657374"
const id = calcurateHash(toLE("B1497F5FBA651B4F") + cat)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// 941299B2 B7E1291C
// 最初から最上位ビット立ってるパターン

모자이크 ID



Alpaca, Bison



네임스페이스 ID와 비슷한 느낌입니다. 네임스페이스 ID와 모자이크 이름을 결합하여 해시합니다.

모자이크(xem)
const xem = "78656d"
const id = calcurateHash(toLE("84B3552D375FFA4B") + xem)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// D525AD41 D95FCF29

Cow



극적으로 바뀌었습니다.

모자이크에서 이름이라는 개념이 사라졌습니다.

논스(난스)라는 임의의 값과 공개키로부터 도출됩니다.

또, 최상위 비트가 반드시 0 가 되었습니다.

모자이크(nonce=0)
const publicKey = '7F78559C556642FE132616910B1C9F2C36BC144D2D3A9E909092D64A0D0DE0DE'
const id = calcurateHash(toLE("00000000") + publicKey)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// 119E1566 1E9B2758

모자이크(nonce=1)
const publicKey = '7F78559C556642FE132616910B1C9F2C36BC144D2D3A9E909092D64A0D0DE0DE'
const id = calcurateHash(toLE("00000001") + publicKey)
console.log(toLE(id.substring(8,16)) + " " + toLE(id.substring(0,8)))
// AAECBFD7 6AE7411B
// 最上位ビットを下げると
// 2AECBFD7 6AE7411B

toLE 및 calcurateHash 정보



toLE
const nem2lib = require("nem2-library")
function toLE(hex) {
    const uint8arr = nem2lib.convert.hexToUint8(hex)
    return nem2lib.convert.uint8ToHex(uint8arr.reverse())
}

calcurateHash
const sha3_256 = require('js-sha3').sha3_256
function calcurateHash(hex) {
    const hash = sha3_256.create();
    hash.update(Buffer.from(hex, 'hex'));
    return hash.hex().toUpperCase();
}

Cow에서 네메시스 블록에 정의한 ID를 쉽게 보는 방법



nemgen을 할 때 로그에서 볼 수 있습니다.



왜 NamespaceId는 MSB가 1이고 MosaicId는 MSB가 0입니다.



Gimre 씨가 대답했습니다!



Cow에서 모자이크에 이름을 설정하려면



MosaicAliasTransaction을 사용하여 네임스페이스와 연결합니다.

결론



지금까지는 네임스페이스 공간 안에 모자이크가 있는 이미지였습니다.

Cow는 네임스페이스가 이름 정의 역할을 했고 모자이크가 토큰 자산을 정의하는 역할을 갖게 되었다고 느꼈습니다.

좋은 웹페이지 즐겨찾기