hi all 來到第19天,昨天已經把變色龍雜湊函數給應用在專案上了,就目前來說區塊訊息的編輯功能是沒有問題的。
但還少了一步驟,那就是驗證的問題。因此在 update block 前,必須來驗證下這個區塊計算出來的變色龍雜湊值簽章是否正確。
這邊我的解法是在 Controller 計算好變色龍雜湊簽章值後直接進行驗證,code如下
var chameleonSignature = chameleonHashService.Sign(request.Data);
var isSignatureValidated = chameleonHashService.Verify(new ChameleonHashVerifyRequest
{
KeyPairDomain = EccGenerator.GetKeyDomain(),
Message = request.Data,
StrSignature = chameleonSignature.Value
});
這樣一來專案的雛型大致上是完成了,看起來可以來著手下一步: 容器化。 主要的做法呢就是將專案打包成一個 image 檔,在之後直接透過 docker 就可以部屬服務了,其實這個也是為了之後的 K8s 打基底。
那這次的 dockerfile 如下:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
COPY ./ ./
RUN dotnet restore "CustomBlockChainLab.csproj"
RUN dotnet publish "CustomBlockChainLab.csproj" -c Release -o published
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
ENV TZ Asia/Taipei
RUN apk add tzdata && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
RUN apk add --no-cache icu-libs
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
ENV ASPNETCORE_HTTP_PORTS=80
ENV DB_SERVER=localhost
ENV DB_NAME=Blockchain
ENV DB_USER=root
ENV DB_PASS=<YourStrong@Passw0rd>
WORKDIR /app
COPY --from=build /app/published/ ./
ENTRYPOINT ["dotnet", "CustomBlockChainLab.dll"]
接著透過指令進行編譯
docker build .
編譯完後透過 image 建立一個 container
docker run -itd -p 8080:80 --name custom-chain
最後,就可以透過 localhost:8080 為專案的 hostname 打打看 api囉。
今天把專案容器化了,明天來進行 redis 的研究,用以降低專案對 db 的讀寫耗能。
結語: 你聽過秒殺系統嗎