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(