NEM2(Catapult)라면 네임스페이스에서 모자이크까지 한 번에 만들 수 있는 이야기

14234 단어 catapultBlockchainNEM
이 기사는 alpaca 때의 기사입니다. 최신 버전에서는 작동하지 않습니다

현재 NEM 모자이크 발행



현재 NEM에서 예를 들어 nemket.2018:ticket 라는 모자이크를 게시하려고 하면 다음 세 가지 트랜잭션이 발생해야 합니다.
  • 상위 네임스페이스: nemket 만들기 트랜잭션
  • 자식 네임 스페이스 : 2018를 만드는 트랜잭션
  • 모자이크: ticket 만들기 트랜잭션

  • 그리고이 모자이크를 발행하기 위해 부모 네임 스페이스를 만드는 트랜잭션이 블록에 캡처 될 때까지 기다리고 자식 네임 스페이스를 만들고 블록에 캡처 될 때까지 기다리십시오 ... 그리고 모자이크 만들기 위해 3 블록을 기다려야합니다.

    이게 뭐가 귀찮지 않니?

    이것이, NEM2(Catapult)가 되면 1트랜잭션으로 작성할 수 있습니다! 예, 집계 트랜잭션을 사용하십시오.

    NEM2 (Catapult) 모자이크 발행



    NEM2(Catapult)로 nemket.2018:ticket 라는 모자이크를 발행할 때는 AggregateCompleteTransaction 로 다음의 트랜잭션을 1 정리해 보낼 수 있습니다.
  • 상위 네임스페이스: nemket 만들기 트랜잭션
  • 자식 네임 스페이스 : 2018를 만드는 트랜잭션
  • 모자이크: ticket 만들기 트랜잭션
  • 모자이크: ticket 공급량을 설정하는 트랜잭션

  • ※ NEM2의 경우, 모자이크 작성시에는 모자이크의 이름·프로퍼티를 설정하는 트랜잭션과 공급량을 설정하는 트랜잭션은 별도로 되어 있으며, 이 시점에서 집계 트랜잭션을 사용하고 있습니다.

    소스 코드



    TransactionHttp('http://localhost:9000')nem2-camel 을 시작하고 연결
    import { Account, NetworkType, TransactionHttp, NamespaceId, RegisterNamespaceTransaction, Deadline, UInt64, AggregateTransaction, MosaicDefinitionTransaction, MosaicProperties, MosaicSupplyChangeTransaction, MosaicSupplyType } from 'nem2-sdk';
    
    const privateKey = 'YOUR_PRIVATE_KEY';
    const account = Account.createFromPrivateKey(privateKey, NetworkType.MIJIN_TEST);
    
    const syncTransactionHttp = new TransactionHttp('http://localhost:9000');
    
    const rootNamespaceName = 'nemket';
    const subNamespaceName = '2018';
    const mosaicNamespace = rootNamespaceName + '.' + subNamespaceName
    const mosaicName = 'ticket';
    
    const registerNamespaceTransaction = RegisterNamespaceTransaction.createRootNamespace(
      Deadline.create(),
      rootNamespaceName,
      UInt64.fromUint(1000),
      NetworkType.MIJIN_TEST
    );
    
    const registerSubNamespaceTransaction = RegisterNamespaceTransaction.createSubNamespace(
      Deadline.create(),
      subNamespaceName,
      rootNamespaceName,
      NetworkType.MIJIN_TEST
    );
    
    const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create(
      Deadline.create(),
      mosaicName,
      mosaicNamespace,
      MosaicProperties.create({
        supplyMutable: true,
        transferable: true,
        levyMutable: false,
        divisibility: 0,
        duration: UInt64.fromUint(1000)
      }
      ),
      NetworkType.MIJIN_TEST
    );
    
    const mosaicSupplyChangeTransaction = MosaicSupplyChangeTransaction.create(
      Deadline.create(),
      mosaicDefinitionTransaction.mosaicId,
      MosaicSupplyType.Increase,
      UInt64.fromUint(100000),
      NetworkType.MIJIN_TEST
    );
    
    const aggregateTransaction = AggregateTransaction.createComplete(
      Deadline.create(),
      [
        registerNamespaceTransaction.toAggregate(account.publicAccount),
        registerSubNamespaceTransaction.toAggregate(account.publicAccount),
        mosaicDefinitionTransaction.toAggregate(account.publicAccount),
        mosaicSupplyChangeTransaction.toAggregate(account.publicAccount)
      ],
      NetworkType.MIJIN_TEST,
      []
    );
    
    const signedTransaction = account.sign(aggregateTransaction);
    
    syncTransactionHttp.announceSync(signedTransaction).subscribe(
      x => console.log(x),
      err => console.error(err)
    );
    
    

    응답


    AggregateTransaction {
      type: 16705,
      networkType: 144,
      version: 2,
      deadline: Deadline { value: LocalDateTime { _date: [Object], _time: [Object] } },
      fee: UInt64 { lower: 0, higher: 0 },
      signature: '981D92E100937EBDD75B3D3EE45AA8BA6F9EA8CEEC74A155EFB0620DB87C955D7C7A10282DDE706401D431E30C0EECC79EAC19FAD00AAA4EEDB5AD38B9B49706',
      signer:
       PublicAccount {
         publicKey: '60ED1F0F598C9429963243BFAB09E87A0836BEAB3F47CBF7F3244C57AD4CEB53',
         address:
          Address {
            address: 'SAYWGBK3ELERVSKTSOX4X35RSHHQXAYPXG2FDHK6',
            networkType: 144 } },
      transactionInfo:
       TransactionInfo {
         height: UInt64 { lower: 0, higher: 0 },
         index: undefined,
         id: undefined,
         hash: 'A2D0ACB12F235F1108F4ACADA8CE58C5A099FBEC1C499741E43FE6076E29644C',
         merkleComponentHash: 'A2D0ACB12F235F1108F4ACADA8CE58C5A099FBEC1C499741E43FE6076E29644C' },
      innerTransactions:
       [ RegisterNamespaceTransaction {
           type: 16718,
           networkType: 144,
           version: 2,
           deadline: [Object],
           fee: [Object],
           signature: '981D92E100937EBDD75B3D3EE45AA8BA6F9EA8CEEC74A155EFB0620DB87C955D7C7A10282DDE706401D431E30C0EECC79EAC19FAD00AAA4EEDB5AD38B9B49706',
           signer: [Object],
           transactionInfo: undefined,
           namespaceType: 0,
           namespaceName: 'nemket',
           namespaceId: [Object],
           duration: [Object],
           parentId: undefined },
         RegisterNamespaceTransaction {
           type: 16718,
           networkType: 144,
           version: 2,
           deadline: [Object],
           fee: [Object],
           signature: '981D92E100937EBDD75B3D3EE45AA8BA6F9EA8CEEC74A155EFB0620DB87C955D7C7A10282DDE706401D431E30C0EECC79EAC19FAD00AAA4EEDB5AD38B9B49706',
           signer: [Object],
           transactionInfo: undefined,
           namespaceType: 1,
           namespaceName: '2018',
           namespaceId: [Object],
           duration: undefined,
           parentId: [Object] },
         MosaicDefinitionTransaction {
           type: 16717,
           networkType: 144,
           version: 2,
           deadline: [Object],
           fee: [Object],
           signature: '981D92E100937EBDD75B3D3EE45AA8BA6F9EA8CEEC74A155EFB0620DB87C955D7C7A10282DDE706401D431E30C0EECC79EAC19FAD00AAA4EEDB5AD38B9B49706',
           signer: [Object],
           transactionInfo: undefined,
           parentId: [Object],
           mosaicId: [Object],
           mosaicName: 'ticket',
           mosaicProperties: [Object] },
         MosaicSupplyChangeTransaction {
           type: 16973,
           networkType: 144,
           version: 2,
           deadline: [Object],
           fee: [Object],
           signature: '981D92E100937EBDD75B3D3EE45AA8BA6F9EA8CEEC74A155EFB0620DB87C955D7C7A10282DDE706401D431E30C0EECC79EAC19FAD00AAA4EEDB5AD38B9B49706',
           signer: [Object],
           transactionInfo: undefined,
           mosaicId: [Object],
           direction: 1,
           delta: [Object] } ],
      cosignatures: [] }
    

    블록 탐색기에서 확인



    ※ 익스플로러에 결함이 있는지 InnterTransaction이 3 개 밖에 없다 ...



    요약



    복수의 거래를 일괄 정리하는 문맥으로 말해지는 경우가 많은 어그리게이트트랜잭션입니다만, 네임스페이스로부터 모자이크의 작성까지를 1회로 실시할 수 있도록(듯이), 전송 트랜잭션 이외의 트랜잭션도 정리할 수 있습니다.
    이렇게하면 현재 NEM에서 트랜잭션을 보내고 캡처되기를 기다리는 번거로운 일을하지 않아도 UX를 개선 할 수 있습니다.

    좋은 웹페이지 즐겨찾기