トランザクション のアナウンスには関連コストがあります。コストはネットワークを安全に保ち、インフラを運用している ハーベスタ へのインセンティブの提供として必須です。
デフォルトでは、手数料は Symbol ネットワーク基軸通貨で支払われます。
ネットワークタイプ | モザイク名 |
---|---|
PRIVATE | cat.currency |
TEST_NET | symbol.xym |
プライベートチェーンでは、ニーズに合わせるために手数料を無くしたり、他の モザイク を使用するために ネットワークの設定を編集 できます。
トランザクションに関連する手数料は、主としてトランザクションのサイズによって異なります。トランザクションを送信するアカウントから差し引かれる実効手数料はトランザクションのサイズとブロックをハーベストするノードによって設定される手数料乗数の積として計算されます。
ノード所有者は 手数料乗数 を 0 を含むすべての正の値に設定できます。ノードが新しいブロックをハーベストするとき fee_multiplier
は ブロックヘッダー に格納され、含まれるトランザクションすべてに対して支払われた有効な手数料を決定します。
トランザクションを送信する前に、トランザクション定義の中で max_fee
を指定する必要があり、これはアカウントがこのトランザクションに費やせる最大手数料を示しています。
effective_fee
が max_fee
以下の場合、ハーベスタはトランザクションをブロックに含める選択ができます。ハーベスティングノードはそれらの トランザクションインクルード戦略 を設定できます:
max_fee
を不必要に高く設定せずにトランザクションが確実に含まれるようにするためには、トランザクション送信者は REST ゲートウェイ に直近 N ブロックのネットワークの乗数の中央値、平均値、最高値、または最低値を問い合わせることができます。たとえば、送信者はトランザクションの max_fee を次のように設定できます:
const publicAccount1 = Account.generateNewAccount(NetworkType.TEST_NET).publicAccount;
const publicAccount2 = Account.generateNewAccount(NetworkType.TEST_NET).publicAccount;
// Get median fee multiplier
const nodeUrl = 'http://api-01.us-east-1.096x.symboldev.network:3000';
const repositoryHttp = new RepositoryFactoryHttp(nodeUrl);
const networkHttp = repositoryHttp.createNetworkRepository();
const medianFeeMultiplier = (await networkHttp.getTransactionFees().toPromise()).medianFeeMultiplier;
// Define transaction and set max fee
const rawAddress = 'TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ';
const recipientAddress = Address.createFromRawAddress(rawAddress);
const transferTransaction = TransferTransaction.create(
Deadline.create(),
recipientAddress,
[],
PlainMessage.create('This is a test message'),
NetworkType.TEST_NET)
.setMaxFee(medianFeeMultiplier);
const publicAccount1 = symbol_sdk_1.Account.generateNewAccount(symbol_sdk_1.NetworkType.TEST_NET).publicAccount;
const publicAccount2 = symbol_sdk_1.Account.generateNewAccount(symbol_sdk_1.NetworkType.TEST_NET).publicAccount;
// Get median fee multiplier
const nodeUrl = 'http://api-01.us-east-1.096x.symboldev.network:3000';
const repositoryHttp = new symbol_sdk_1.RepositoryFactoryHttp(nodeUrl);
const networkHttp = repositoryHttp.createNetworkRepository();
const medianFeeMultiplier = (yield networkHttp.getTransactionFees().toPromise()).medianFeeMultiplier;
// Define transaction and set max fee
const rawAddress = 'TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-YJQ';
const recipientAddress = symbol_sdk_1.Address.createFromRawAddress(rawAddress);
const transferTransaction = symbol_sdk_1.TransferTransaction.create(symbol_sdk_1.Deadline.create(), recipientAddress, [], symbol_sdk_1.PlainMessage.create('This is a test message'), symbol_sdk_1.NetworkType.TEST_NET)
.setMaxFee(medianFeeMultiplier);
注釈
設定した乗数が少なすぎる場合、トランザクションが承認されることを保証できません。承認される可能性を高めるためには、トランザクション送信者が medianNetworkFeeMultiplier
と highestFeeMultiplier
の間で任意の値を使用してください。
アグリゲートボンデッドトランザクション のサイズを決定するには、トランザクションに署名する必要がある参加者アカウントの数を事前に知っておく必要があります。
// Define transaction and set max fee
const requiredCosignatures = 1;
const aggregateTransaction = AggregateTransaction
.createBonded(
Deadline.create(),
[transferTransaction.toAggregate(publicAccount1),
transferTransaction.toAggregate(publicAccount2)],
NetworkType.TEST_NET,
[])
.setMaxFeeForAggregate(medianFeeMultiplier, 1);
// Define transaction and set max fee
const requiredCosignatures = 1;
const aggregateTransaction = symbol_sdk_1.AggregateTransaction
.createBonded(symbol_sdk_1.Deadline.create(), [transferTransaction.toAggregate(publicAccount1),
transferTransaction.toAggregate(publicAccount2)], symbol_sdk_1.NetworkType.TEST_NET, [])
.setMaxFeeForAggregate(medianFeeMultiplier, 1);
ネームスペース または モザイク を登録しようとするアカウントはトランザクション手数料に加えてレンタル手数料の支払いが必要です。実効レンタル手数料は最終の maxDifficultyBlocks に対する median network multiplier に基づいて調整されます。
より詳しくは モザイク と ネームスペース のレンタル実効手数料の計算方法を参照してください。
次項: レシート
お探しのものは見つかりましたか? フィードバックをください。