diff --git a/.github/workflows/push_docker_image.yml b/.github/workflows/push_docker_image.yml
index bd0911e71..238840de9 100644
--- a/.github/workflows/push_docker_image.yml
+++ b/.github/workflows/push_docker_image.yml
@@ -48,28 +48,18 @@ jobs:
docker run --rm --privileged multiarch/qemu-user-static \
--reset \
-p yes
- - name: build-and-push-amd64
- run: |
- docker build . \
- -f ${{ matrix.docker.dockerfile }}.amd64 \
- -t ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 \
- --build-arg COMMIT=git-${{ github.sha }} \
- --build-arg TARGETPLATFORM=linux/amd64
- docker push ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64
- - name: build-and-push-arm64v8
- run: |
- docker build . \
- -f ${{ matrix.docker.dockerfile }}.arm64v8 \
- -t ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 \
- --build-arg COMMIT=git-${{ github.sha }} \
- --build-arg TARGETPLATFORM=linux/arm64
- docker push ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8
- - name: merge-manifest-and-push
- run: |
- docker manifest create ${{ matrix.docker.repo }}:git-${{ github.sha }} \
- --amend ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 \
- --amend ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8
- docker manifest push ${{ matrix.docker.repo }}:git-${{ github.sha }}
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ with:
+ platforms: linux/arm/v8,linux/amd64
+ - name: Build and push
+ uses: docker/build-push-action@v5
+ with:
+ push: ${{ github.event_name != 'pull_request' }}
+ platforms: linux/arm64,linux/amd64
+ tags: ${{ matrix.docker.repo }}:git-${{ github.sha }}
+ file: ${{ matrix.docker.dockerfile }}
+ build-args: COMMIT=git-${{ github.sha }}
tag:
name: tag (${{ matrix.docker.repo }})
@@ -87,7 +77,7 @@ jobs:
--password '${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}'
- name: push git tagged version
run: |
- docker pull ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64
+ docker pull ${{ matrix.docker.repo }}:git-${{ github.sha }}
if [[ -z "${{ github.event.inputs.imageTag }}" ]]; then
export IMAGE_TAG=${{ github.ref_name }}
else
@@ -95,15 +85,6 @@ jobs:
fi
docker tag \
- ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 \
- ${{ matrix.docker.repo }}:$IMAGE_TAG-amd64
- docker push ${{ matrix.docker.repo }}:$IMAGE_TAG-amd64
- docker pull ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8
- docker tag \
- ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 \
- ${{ matrix.docker.repo }}:$IMAGE_TAG-arm64v8
- docker push ${{ matrix.docker.repo }}:$IMAGE_TAG-arm64v8
- docker manifest create ${{ matrix.docker.repo }}:$IMAGE_TAG \
- --amend ${{ matrix.docker.repo }}:$IMAGE_TAG-amd64 \
- --amend ${{ matrix.docker.repo }}:$IMAGE_TAG-arm64v8
- docker manifest push ${{ matrix.docker.repo }}:$IMAGE_TAG
+ ${{ matrix.docker.repo }}:git-${{ github.sha }} \
+ ${{ matrix.docker.repo }}:$IMAGE_TAG
+ docker push ${{ matrix.docker.repo }}:$IMAGE_TAG
diff --git a/Lib9c b/Lib9c
index d72847989..9f1661102 160000
--- a/Lib9c
+++ b/Lib9c
@@ -1 +1 @@
-Subproject commit d7284798938ba67750a05fd9e09317a550cff161
+Subproject commit 9f1661102a74ef38c4715061c7e8a36d8c544366
diff --git a/NineChronicles.Headless.Executable.sln.DotSettings b/NineChronicles.Headless.Executable.sln.DotSettings
index 61ddddd89..faba90398 100644
--- a/NineChronicles.Headless.Executable.sln.DotSettings
+++ b/NineChronicles.Headless.Executable.sln.DotSettings
@@ -1,3 +1,103 @@
+ DO_NOT_SHOW
+ SUGGESTION
+ SUGGESTION
+ SUGGESTION
+ SUGGESTION
+ SUGGESTION
+ SUGGESTION
+ SUGGESTION
+ SUGGESTION
+ Required
+ Required
+ Required
+ Required
+ False
+ BlockScoped
+ True
+ True
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ True
+ False
+ True
+ NEVER
+ NEVER
+ ALWAYS
+ True
+ False
+ 300
+ True
+ True
+ AI
+ CRYSTAL
+ GARAGE
+ GO
+ HTTP
NCG
- True
\ No newline at end of file
+ PACKAGE
+ SINGLE
+ VFX
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
\ No newline at end of file
diff --git a/NineChronicles.Headless.Executable/Configuration.cs b/NineChronicles.Headless.Executable/Configuration.cs
index 2543b2c23..0f0d9c6f2 100644
--- a/NineChronicles.Headless.Executable/Configuration.cs
+++ b/NineChronicles.Headless.Executable/Configuration.cs
@@ -93,8 +93,6 @@ public class Configuration
public AccessControlServiceOptions? AccessControlService { get; set; }
- public int ArenaParticipantsSyncInterval { get; set; } = 1000;
-
public void Overwrite(
string? appProtocolVersionString,
string[]? trustedAppProtocolVersionSignerStrings,
@@ -143,7 +141,6 @@ public void Overwrite(
double? consensusTargetBlockIntervalMilliseconds,
int? consensusProposeSecondBase,
int? maxTransactionPerBlock,
- int? arenaParticipantsSyncInterval,
bool? remoteKeyValueService
)
{
@@ -195,7 +192,6 @@ public void Overwrite(
ConsensusTargetBlockIntervalMilliseconds = consensusTargetBlockIntervalMilliseconds ?? ConsensusTargetBlockIntervalMilliseconds;
ConsensusProposeSecondBase = consensusProposeSecondBase ?? ConsensusProposeSecondBase;
MaxTransactionPerBlock = maxTransactionPerBlock ?? MaxTransactionPerBlock;
- ArenaParticipantsSyncInterval = arenaParticipantsSyncInterval ?? ArenaParticipantsSyncInterval;
RemoteKeyValueService = remoteKeyValueService ?? RemoteKeyValueService;
}
}
diff --git a/NineChronicles.Headless.Executable/Program.cs b/NineChronicles.Headless.Executable/Program.cs
index db5821b8f..fcf00694f 100644
--- a/NineChronicles.Headless.Executable/Program.cs
+++ b/NineChronicles.Headless.Executable/Program.cs
@@ -215,10 +215,6 @@ public async Task Run(
[Option("config", new[] { 'C' },
Description = "Absolute path of \"appsettings.json\" file to provide headless configurations.")]
string? configPath = "appsettings.json",
- [Option(Description = "arena participants list sync interval time")]
- int? arenaParticipantsSyncInterval = null,
- [Option(Description = "arena participants list sync enable")]
- bool arenaParticipantsSync = true,
[Option(Description = "[DANGER] Turn on RemoteKeyValueService to debug.")]
bool remoteKeyValueService = false,
[Ignore] CancellationToken? cancellationToken = null
@@ -303,7 +299,7 @@ public async Task Run(
txLifeTime, messageTimeout, tipTimeout, demandBuffer, skipPreload,
minimumBroadcastTarget, bucketSize, chainTipStaleBehaviorType, txQuotaPerSigner, maximumPollPeers,
consensusPort, consensusPrivateKeyString, consensusSeedStrings, consensusTargetBlockIntervalMilliseconds, consensusProposeSecondBase,
- maxTransactionPerBlock, arenaParticipantsSyncInterval, remoteKeyValueService
+ maxTransactionPerBlock, remoteKeyValueService
);
// Clean-up previous temporary log files.
diff --git a/NineChronicles.Headless/GraphTypes/ActionMutation.cs b/NineChronicles.Headless/GraphTypes/ActionMutation.cs
index 17e9f7e66..73e08e86b 100644
--- a/NineChronicles.Headless/GraphTypes/ActionMutation.cs
+++ b/NineChronicles.Headless/GraphTypes/ActionMutation.cs
@@ -17,8 +17,11 @@ public class ActionMutation : ObjectGraphType
{
public ActionMutation(NineChroniclesNodeService service)
{
+ DeprecationReason = "This API is insecure and must not be used.";
+
Field>("createAvatar",
description: "Create new avatar.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
@@ -96,6 +99,7 @@ public ActionMutation(NineChroniclesNodeService service)
Field>("hackAndSlash",
description: "Start stage to get material.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
@@ -179,6 +183,7 @@ public ActionMutation(NineChroniclesNodeService service)
Field>("combinationEquipment",
description: "Combine new equipment.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
@@ -239,6 +244,7 @@ public ActionMutation(NineChroniclesNodeService service)
Field>("itemEnhancement",
description: "Upgrade equipment.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
@@ -303,6 +309,7 @@ public ActionMutation(NineChroniclesNodeService service)
Field>("dailyReward",
description: "Get daily reward.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
@@ -345,6 +352,7 @@ public ActionMutation(NineChroniclesNodeService service)
});
Field>("chargeActionPoint",
description: "Charge Action Points using Material.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
@@ -388,6 +396,7 @@ public ActionMutation(NineChroniclesNodeService service)
Field>("combinationConsumable",
description: "Combine new Consumable.",
+ deprecationReason: DeprecationReason,
arguments: new QueryArguments(
new QueryArgument>
{
diff --git a/NineChronicles.Headless/GraphTypes/CurrencyEnumType.cs b/NineChronicles.Headless/GraphTypes/CurrencyEnumType.cs
index ef6745ea3..84f467599 100644
--- a/NineChronicles.Headless/GraphTypes/CurrencyEnumType.cs
+++ b/NineChronicles.Headless/GraphTypes/CurrencyEnumType.cs
@@ -9,7 +9,13 @@ public enum CurrencyEnum
CRYSTAL,
NCG,
GARAGE,
- MEAD
+ MEAD,
+ RUNE_GOLDENLEAF,
+ RUNE_ADVENTURER,
+ RUNESTONE_FREYA_LIBERATION,
+ RUNESTONE_FREYA_BLESSING,
+ RUNESTONE_ODIN_WEAKNESS,
+ RUNESTONE_ODIN_WISDOM
}
public class CurrencyEnumType : EnumerationGraphType
diff --git a/NineChronicles.Headless/GraphTypes/StandaloneQuery.cs b/NineChronicles.Headless/GraphTypes/StandaloneQuery.cs
index 3cfeb63ff..c9ed20236 100644
--- a/NineChronicles.Headless/GraphTypes/StandaloneQuery.cs
+++ b/NineChronicles.Headless/GraphTypes/StandaloneQuery.cs
@@ -238,17 +238,20 @@ public StandaloneQuery(StandaloneContext standaloneContext, IKeyStore keyStore,
var filtered = block.Transactions
.Where(tx => tx.Actions.Count == 1)
+ .Where(tx =>
+ tx.Actions[0] is Dictionary dictionary && dictionary.ContainsKey("type_id") &&
+ dictionary["type_id"] is Text typeId && typeId == TransferAsset.TypeIdentifier)
.Select(tx =>
(
transactionRepository.GetTxExecution(blockHash, tx.Id) ??
- throw new InvalidOperationException($"TxExecution {tx.Id} not found."),
+ throw new InvalidOperationException($"TxExecution {tx.Id} not found."),
ToAction(tx.Actions[0])
))
.Where(pair => pair.Item2 is ITransferAsset)
.Select(pair => (pair.Item1!, (ITransferAsset)pair.Item2))
.Where(pair => !pair.Item1.Fail &&
- (!recipient.HasValue || pair.Item2.Recipient == recipient) &&
- pair.Item2.Amount.Currency.Ticker == "NCG");
+ (!recipient.HasValue || pair.Item2.Recipient == recipient) &&
+ pair.Item2.Amount.Currency.Ticker == "NCG");
var histories = filtered.Select(pair =>
new TransferNCGHistory(