집계 거래로 수수료 40% 절감
소개
거래 수수료는 거래 데이터 크기에 비례합니다. 예를 들어, 비례 상수가 100이고 트랜잭션 크기가 165바이트인 경우 수수료는 16500이 됩니다. 분할 수가 6이므로 0.0165XEM?이 될 것입니다.
따라서 집계 트랜잭션을 사용하여 가능한 한 크기를 줄이면 수수료를 줄일 수 있습니다.
전송 트랜잭션을 여러 번 전송하는 VS 집계 트랜잭션으로 통합
트랜잭션의 크기를 비교합니다.
A: 모자이크 1종류로 메시지 없는 페이로드의 트랜스퍼 트랜잭션
const {
Account,
Address,
Deadline,
NetworkCurrencyMosaic,
NetworkType,
PlainMessage,
TransactionHttp,
TransferTransaction,
UInt64
} = require("nem2-sdk");
const recipientAddress = 'SB2Y5ND4FDLBIO5KHXTKRWODDG2QHIN73DTYT2PC';
const generationHash = 'AC8EE4E2D1FEA3C84D5E8DC8D032B16FC86EB89B494B1D4A0A5E7CD66BC4AC30';
const privateKey = '7808B5B53ECF24E40BE17B8EC3D0EB5F7C3F3D938E0D95A415F855AD4C27B2A4';
const transferTransaction = TransferTransaction.create(
Deadline.create(),
Address.createFromRawAddress(recipientAddress),
[NetworkCurrencyMosaic.createRelative(0)],
PlainMessage.create(''),
NetworkType.MIJIN_TEST,
UInt64.fromUint(0)
);
const account = Account.createFromPrivateKey(privateKey,NetworkType.MIJIN_TEST);
const signedTransaction = account.sign(transferTransaction, generationHash);
// const transactionHttp = new TransactionHttp('http://13.114.200.132:3000');
// transactionHttp.announce(signedTransaction).subscribe(
// x => console.log(x),
// err => console.error(err)
// );
console.log('HASH: ' + signedTransaction.hash);
console.log('SIGNER: ' + signedTransaction.signer);
console.log('PAYLOAD: ' + signedTransaction.payload);
HASH: 9D9C55277DEF5BB05B83150990F3D4CDE63BBD2375D822EAFA24E028D4F9C6CA
SIGNER: 5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C
PAYLOAD: A50000008B1139BE7695D6BE6A011E6F7B12AF0C9120191257FA09C7C139AF7815A011A739D3139C941C1358FA42A4B177485FCE35EDB7E7998A5E5BBB34F32480F854095D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544100000000000000002F1B00761700000090758EB47C28D6143BAA3DE6A8D9C319B503A1BFD8E789E9E20100010044B262C46CEABB850000000000000000
B: 모자이크 1종류로 메세지 없는 트랜스퍼 트랜잭션을 10개 이너 트랜잭션으로 한 어그리게이트 트랜잭션
const {
Account,
AggregateTransaction,
Deadline,
NetworkCurrencyMosaic,
NetworkType,
PlainMessage,
TransactionHttp,
TransferTransaction,
UInt64
} = require("nem2-sdk");
const numAddrs = 10;
const recipientAddresses = (() => {
const addrs = [];
for (let i = 0; i < numAddrs; i++) {
const newAddr = Account.generateNewAccount(NetworkType.MIJIN_TEST).address;
addrs.push(newAddr);
}
return addrs;
})();
const generationHash = 'AC8EE4E2D1FEA3C84D5E8DC8D032B16FC86EB89B494B1D4A0A5E7CD66BC4AC30';
const privateKey = '7808B5B53ECF24E40BE17B8EC3D0EB5F7C3F3D938E0D95A415F855AD4C27B2A4';
const transferTransactions = (() => {
const txs = [];
for (let i = 0; i < numAddrs; i++) {
const transferTransaction = TransferTransaction.create(
Deadline.create(),
recipientAddresses[i],
[NetworkCurrencyMosaic.createRelative(0)],
PlainMessage.create(''),
NetworkType.MIJIN_TEST,
UInt64.fromUint(0)
);
txs.push(transferTransaction);
}
return txs;
})();
const account = Account.createFromPrivateKey(privateKey,NetworkType.MIJIN_TEST);
const aggregateTransaction = AggregateTransaction.createComplete(
Deadline.create(),
transferTransactions.map(tx => tx.toAggregate(account.publicAccount)),
NetworkType.MIJIN_TEST,
[],
UInt64.fromUint(0)
);
const signedTransaction = account.sign(aggregateTransaction, generationHash);
// const transactionHttp = new TransactionHttp('http://13.114.200.132:3000');
// transactionHttp.announce(signedTransaction).subscribe(
// x => console.log(x),
// err => console.error(err)
// );
console.log('HASH: ' + signedTransaction.hash);
console.log('SIGNER: ' + signedTransaction.signer);
console.log('PAYLOAD: ' + signedTransaction.payload);
HASH: 0B16ADEFAD2DAE111AF03AF8830DD21EFA24D9BAF72290B9F43517A3AB843D90
SIGNER: 5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C
PAYLOAD: CE030000F17FD8F4B03E1FB0254156C9A088EC0D9A469388DCF9E73792FAF05409E31C3088E0F0E690E58FB9664AA926B0517DC7272551F54FD2A7B91E03A992B71B52085D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C029041410000000000000000F7C2FC751700000052030000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C03905441903317B57BB746AAF094117C797F52C54822BDE503F50921880100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C03905441908E6211E7F43024B55040BD526C9E23B6F2E7598FE17962860100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190FB5F83DA722003C36E3DA64429F4495A34D9E2E1155B6FB40100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C039054419062EE63C3BBF3B4735228B89D6932D00D8C8974C7EC48642C0100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190070FE771317883905A24C6E942F3B8CF125BD9F916F81F2F0100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C039054419050330873A3C9FF230229E0B3E0B812A3C15DE9F005BD9A320100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C03905441902E55B16A88B683E3898983E2D1F8C270D486107B090943280100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190B3ACD865B59B27834DBCBBF9F9D788386EE285EA1414414A0100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190B898F302BF3ECDB3C70A7A9884A103EAA9B10E5E474BA7F10100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190CEB187052546C0296C11D138B4609BE6AD0BF0C1BB3E8C4A0100010044B262C46CEABB850000000000000000
결과적인 것
A는 165바이트, B는 974바이트입니다.
A를 10회 보내면, B와 같은 일을 하게 됩니다(경우에 따라서).
A의 10회는, 1650바이트이므로, 974바이트에 대해, 대략 40%의 삭감이 가능할까 생각됩니다.
응
10회에 한정하지 않는 경우.
전송 수를 n
로 설정하면,
A: 165 * n
B: 124 + 85 * n
그래프로 하면
이런 느낌이 듭니다.
결론
10개 정도를 집약하면 40%의 수수료 삭감이 되는 것을 알 수 있었습니다.
집계함으로써 단순히 수수료 삭감뿐만 아니라 애플리케이션과 API 간의 통신 횟수 삭감도 이어질 것이라고 생각하고 블록 승인을 기다리는 횟수도 줄일 수 있다고 생각합니다.
반대로, 어느 하나라도 실패하면 전부 없었던 것입니다. 예를 들어 잔액이 부족했다. 이것은 장점이자 단점입니다.
하고 싶은 것에 대해, 어느 방법이 적절한가를 확실히 검토할 필요가 있다고 생각합니다.
Reference
이 문제에 관하여(집계 거래로 수수료 40% 절감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/3779f3bed2bb8710ce6e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
트랜잭션의 크기를 비교합니다.
A: 모자이크 1종류로 메시지 없는 페이로드의 트랜스퍼 트랜잭션
const {
Account,
Address,
Deadline,
NetworkCurrencyMosaic,
NetworkType,
PlainMessage,
TransactionHttp,
TransferTransaction,
UInt64
} = require("nem2-sdk");
const recipientAddress = 'SB2Y5ND4FDLBIO5KHXTKRWODDG2QHIN73DTYT2PC';
const generationHash = 'AC8EE4E2D1FEA3C84D5E8DC8D032B16FC86EB89B494B1D4A0A5E7CD66BC4AC30';
const privateKey = '7808B5B53ECF24E40BE17B8EC3D0EB5F7C3F3D938E0D95A415F855AD4C27B2A4';
const transferTransaction = TransferTransaction.create(
Deadline.create(),
Address.createFromRawAddress(recipientAddress),
[NetworkCurrencyMosaic.createRelative(0)],
PlainMessage.create(''),
NetworkType.MIJIN_TEST,
UInt64.fromUint(0)
);
const account = Account.createFromPrivateKey(privateKey,NetworkType.MIJIN_TEST);
const signedTransaction = account.sign(transferTransaction, generationHash);
// const transactionHttp = new TransactionHttp('http://13.114.200.132:3000');
// transactionHttp.announce(signedTransaction).subscribe(
// x => console.log(x),
// err => console.error(err)
// );
console.log('HASH: ' + signedTransaction.hash);
console.log('SIGNER: ' + signedTransaction.signer);
console.log('PAYLOAD: ' + signedTransaction.payload);
HASH: 9D9C55277DEF5BB05B83150990F3D4CDE63BBD2375D822EAFA24E028D4F9C6CA
SIGNER: 5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C
PAYLOAD: A50000008B1139BE7695D6BE6A011E6F7B12AF0C9120191257FA09C7C139AF7815A011A739D3139C941C1358FA42A4B177485FCE35EDB7E7998A5E5BBB34F32480F854095D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544100000000000000002F1B00761700000090758EB47C28D6143BAA3DE6A8D9C319B503A1BFD8E789E9E20100010044B262C46CEABB850000000000000000
B: 모자이크 1종류로 메세지 없는 트랜스퍼 트랜잭션을 10개 이너 트랜잭션으로 한 어그리게이트 트랜잭션
const {
Account,
AggregateTransaction,
Deadline,
NetworkCurrencyMosaic,
NetworkType,
PlainMessage,
TransactionHttp,
TransferTransaction,
UInt64
} = require("nem2-sdk");
const numAddrs = 10;
const recipientAddresses = (() => {
const addrs = [];
for (let i = 0; i < numAddrs; i++) {
const newAddr = Account.generateNewAccount(NetworkType.MIJIN_TEST).address;
addrs.push(newAddr);
}
return addrs;
})();
const generationHash = 'AC8EE4E2D1FEA3C84D5E8DC8D032B16FC86EB89B494B1D4A0A5E7CD66BC4AC30';
const privateKey = '7808B5B53ECF24E40BE17B8EC3D0EB5F7C3F3D938E0D95A415F855AD4C27B2A4';
const transferTransactions = (() => {
const txs = [];
for (let i = 0; i < numAddrs; i++) {
const transferTransaction = TransferTransaction.create(
Deadline.create(),
recipientAddresses[i],
[NetworkCurrencyMosaic.createRelative(0)],
PlainMessage.create(''),
NetworkType.MIJIN_TEST,
UInt64.fromUint(0)
);
txs.push(transferTransaction);
}
return txs;
})();
const account = Account.createFromPrivateKey(privateKey,NetworkType.MIJIN_TEST);
const aggregateTransaction = AggregateTransaction.createComplete(
Deadline.create(),
transferTransactions.map(tx => tx.toAggregate(account.publicAccount)),
NetworkType.MIJIN_TEST,
[],
UInt64.fromUint(0)
);
const signedTransaction = account.sign(aggregateTransaction, generationHash);
// const transactionHttp = new TransactionHttp('http://13.114.200.132:3000');
// transactionHttp.announce(signedTransaction).subscribe(
// x => console.log(x),
// err => console.error(err)
// );
console.log('HASH: ' + signedTransaction.hash);
console.log('SIGNER: ' + signedTransaction.signer);
console.log('PAYLOAD: ' + signedTransaction.payload);
HASH: 0B16ADEFAD2DAE111AF03AF8830DD21EFA24D9BAF72290B9F43517A3AB843D90
SIGNER: 5D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C
PAYLOAD: CE030000F17FD8F4B03E1FB0254156C9A088EC0D9A469388DCF9E73792FAF05409E31C3088E0F0E690E58FB9664AA926B0517DC7272551F54FD2A7B91E03A992B71B52085D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C029041410000000000000000F7C2FC751700000052030000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C03905441903317B57BB746AAF094117C797F52C54822BDE503F50921880100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C03905441908E6211E7F43024B55040BD526C9E23B6F2E7598FE17962860100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190FB5F83DA722003C36E3DA64429F4495A34D9E2E1155B6FB40100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C039054419062EE63C3BBF3B4735228B89D6932D00D8C8974C7EC48642C0100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190070FE771317883905A24C6E942F3B8CF125BD9F916F81F2F0100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C039054419050330873A3C9FF230229E0B3E0B812A3C15DE9F005BD9A320100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C03905441902E55B16A88B683E3898983E2D1F8C270D486107B090943280100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190B3ACD865B59B27834DBCBBF9F9D788386EE285EA1414414A0100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190B898F302BF3ECDB3C70A7A9884A103EAA9B10E5E474BA7F10100010044B262C46CEABB850000000000000000550000005D9513282B65A12A1B68DCB67DB64245721F7AE7822BE441FE813173803C512C0390544190CEB187052546C0296C11D138B4609BE6AD0BF0C1BB3E8C4A0100010044B262C46CEABB850000000000000000
결과적인 것
A는 165바이트, B는 974바이트입니다.
A를 10회 보내면, B와 같은 일을 하게 됩니다(경우에 따라서).
A의 10회는, 1650바이트이므로, 974바이트에 대해, 대략 40%의 삭감이 가능할까 생각됩니다.
응
10회에 한정하지 않는 경우.
전송 수를 n
로 설정하면,
A: 165 * n
B: 124 + 85 * n
그래프로 하면
이런 느낌이 듭니다.
결론
10개 정도를 집약하면 40%의 수수료 삭감이 되는 것을 알 수 있었습니다.
집계함으로써 단순히 수수료 삭감뿐만 아니라 애플리케이션과 API 간의 통신 횟수 삭감도 이어질 것이라고 생각하고 블록 승인을 기다리는 횟수도 줄일 수 있다고 생각합니다.
반대로, 어느 하나라도 실패하면 전부 없었던 것입니다. 예를 들어 잔액이 부족했다. 이것은 장점이자 단점입니다.
하고 싶은 것에 대해, 어느 방법이 적절한가를 확실히 검토할 필요가 있다고 생각합니다.
Reference
이 문제에 관하여(집계 거래로 수수료 40% 절감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/3779f3bed2bb8710ce6e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
A: 165 * n
B: 124 + 85 * n
10개 정도를 집약하면 40%의 수수료 삭감이 되는 것을 알 수 있었습니다.
집계함으로써 단순히 수수료 삭감뿐만 아니라 애플리케이션과 API 간의 통신 횟수 삭감도 이어질 것이라고 생각하고 블록 승인을 기다리는 횟수도 줄일 수 있다고 생각합니다.
반대로, 어느 하나라도 실패하면 전부 없었던 것입니다. 예를 들어 잔액이 부족했다. 이것은 장점이자 단점입니다.
하고 싶은 것에 대해, 어느 방법이 적절한가를 확실히 검토할 필요가 있다고 생각합니다.
Reference
이 문제에 관하여(집계 거래로 수수료 40% 절감), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/planethouki/items/3779f3bed2bb8710ce6e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)