手数料

トランザクション のアナウンスには関連コストがあります。コストはネットワークを安全に保ち、インフラを運用している ハーベスタ へのインセンティブの提供として必須です。

ネットワーク通貨

デフォルトでは、手数料は Symbol ネットワーク基軸通貨で支払われます。

ネットワークタイプごとのデフォルトネットワーク通貨
ネットワークタイプ モザイク名
PRIVATE cat.currency
TEST_NET symbol.xym

プライベートチェーンでは、ニーズに合わせるために手数料を無くしたり、他の モザイク を使用するために ネットワークの設定を編集 できます。

トランザクション手数料

トランザクションに関連する手数料は、主としてトランザクションのサイズによって異なります。トランザクションを送信するアカウントから差し引かれる実効手数料はトランザクションのサイズとブロックをハーベストするノードによって設定される手数料乗数の積として計算されます。

\[effectiveFee = transaction::size * block::feeMultiplier\]

ノード所有者は 手数料乗数 を 0 を含むすべての正の値に設定できます。ノードが新しいブロックをハーベストするとき fee_multiplierブロックヘッダー に格納され、含まれるトランザクションすべてに対して支払われた有効な手数料を決定します。

トランザクションを送信する前に、トランザクション定義の中で max_fee を指定する必要があり、これはアカウントがこのトランザクションに費やせる最大手数料を示しています。

effective_feemax_fee 以下の場合、ハーベスタはトランザクションをブロックに含める選択ができます。ハーベスティングノードはそれらの トランザクションインクルード戦略 を設定できます:

  • Prefer-oldest:高いトランザクションスループットが要求されるネットワークに適しています。最も古いトランザクションを最初に含めます。
  • Minimize-fees: 慈善事業なノード。他のノードが含めたくない最初のトランザクションを含めます。
  • Maximize-fees: パブリックネットワークで最も一般的です。より高い手数料の最初のトランザクションを含みます。

max_fee を不必要に高く設定せずにトランザクションが確実に含まれるようにするためには、トランザクション送信者は REST ゲートウェイ に直近 N ブロックのネットワークの乗数の中央値、平均値、最高値、または最低値を問い合わせることができます。たとえば、送信者はトランザクションの max_fee を次のように設定できます:

\[maxFee = transaction::size ∗ network::medianFeeMultiplier\]
    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);

注釈

設定した乗数が少なすぎる場合、トランザクションが承認されることを保証できません。承認される可能性を高めるためには、トランザクション送信者が medianNetworkFeeMultiplierhighestFeeMultiplier の間で任意の値を使用してください。

アグリゲートボンデッドトランザクション のサイズを決定するには、トランザクションに署名する必要がある参加者アカウントの数を事前に知っておく必要があります。

    // 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 に基づいて調整されます。

より詳しくは モザイクネームスペース のレンタル実効手数料の計算方法を参照してください。

次項: レシート