首页 > 其他分享 >在 Sealos 中使用区块链技术实现统一支付系统

在 Sealos 中使用区块链技术实现统一支付系统

时间:2023-12-12 17:33:59浏览次数:41  
标签:await const Sealos api 支付 import 区块 cloud

拿着区块链技术不一定是去发币,很多业务系统也适合用这些技术,比如做个统一支付系统,积分系统等,可以做为一家公司的金融基础设施,或支付中台。拿链的技术去做有很多好处:

  • 高可用,自带多区域高一致性的能力,自带高可用能力和校验能力。
  • 安全,很大程度防范黑客或者用户篡改资金账户的可能性,非对称加密能力完备。
  • 有成熟的支付和转账等能力,只需要调用几个简单接口就可以完成金额转化。
  • 高鲁棒性,每个新 region 都可以在本地跑一个矿工节点,本地节点负责与其他节点建立 p2p 通信。
  • 多数据中心数据强一致性,不会出现因为网络问题导致数据脑裂。
  • 智能合约可以探索更多业务可能性,可扩展性好。

比如这就是基于区块链技术实现的一套统一支付系统的架构图,主要是利用区块链打造一个数据基础设施。

本文主要讲如何构建这样一套方案的实现细节,主要核心用的技术有:

  • substrate 框架,现在合并到了 polkadot-sdk 中了,区块链底层。
  • Sealos 用来容器化方式启动区块链。
  • Laf 用来写代码实现用户账户创建,转账等操作的例子。

启动区块链

首先在 Sealos 桌面环境中打开【应用管理】:

命令行参数详情:

["--name","sealchain","--chain","/etc/customSpec.json","--rpc-external","--rpc-cors","all"]

这里的配置文件略恶心,开始测试时可以先不加,去掉 --chain /etc/customSpec.json 参数就行。

这个配置是通过命令生成的:

$ substrate build-spec > myCustomSpec.json

这个配置里面有一个 system code 非常恶心非常长,它是编译成 wasm 的代码,不能删,所以这个配置只能先生成了再修改配置文件,substrate 的这个做法我实在不太能苟同,导致编辑配置文件的成本非常高。

测试联通性

https://laf.dev/ 起一个应用,写一个函数,这个不用教,以你的智商和 Laf 的易用性你肯定会,当然如果你的时间不值钱你也可以自己构建个 node.js 环境,我可以确保自己构建环境可以恶心死你。

当日志正常输出时,表示链已经正常工作了。

import cloud from '@lafjs/cloud'
const { ApiPromise, WsProvider } = require('@polkadot/api');

export default async function (ctx: FunctionContext) {
  const provider = new WsProvider('wss://mlnqtutcpqcy.cloud.sealos.io');
  const api = await ApiPromise.create({ provider });

  const chain = await api.rpc.system.chain();
  const lastHeader = await api.rpc.chain.getHeader();

  console.log(`Connected to chain ${chain} and block number ${lastHeader.number}`);
}

创建账户 (Keyring)

import cloud from '@lafjs/cloud'
import { Keyring } from '@polkadot/keyring';
import { mnemonicGenerate } from '@polkadot/util-crypto';

export default async function (ctx: FunctionContext) {
  // 生成一个新的 12 个单词的助记词
  const mnemonic: string = mnemonicGenerate(12);
  console.log(`Mnemonic: ${mnemonic}`);

  // 创建一个新的 keyring
  const keyring = new Keyring({ type: 'sr25519' });

  // 从助记词创建一个新的账户
  const pair = keyring.addFromMnemonic(mnemonic);
  console.log(`Address: ${pair.address}`);
}

这里不需要连接链上,本质上用户的账户是公钥,而公私钥通常比较难记,而且大小写什么的还容易看错,比如 0 和 o,1 和 l,所以人们很聪明的弄出了助记词,根据 12 个常用单词来生成密钥对,这下就好记了,所以你的助记词是你的一切,千万别让别人知道了,类似这个样子:

unhappy enforce oil ridge zebra pupil razor worth polar inform enter bomb

地址长这个样子:

5HjoX44CVrqTpVLqYtiF2cFSmDwtbNUfrbKcEbKDyLnP8NCv

下面我们就可以从超级账户里面转账到这个账户里了,再去查询这个账户的资金。

转账

为了方便,稍微封装一下 API:

import { ApiPromise, WsProvider, Keyring } from '@polkadot/api'
// 连接到你的Polkadot节点
const provider = new WsProvider('wss://mlnqtutcpqcy.cloud.sealos.io');
let api = null

export async function getAPI() {
  if(!api) {
    api = await ApiPromise.create({ provider });
  }

  return api
}

从超级账户转帐:

import cloud from '@lafjs/cloud'
import { ApiPromise, Keyring } from '@polkadot/api'
import { getAPI } from '@/api'

export default async function (ctx: FunctionContext) {

  const api = await getAPI()

  // 创建一个新的Keyring实例,并添加Alice账户
  const keyring = new Keyring({ type: 'sr25519' });
  // 超级账户的私钥
  const alicePair = keyring.addFromUri('slender alter hybrid catalog feature video pumpkin random sniff advice spoil apple');  // Alice的助记词

  // 你的接收者地址和转账金额
  const recipientAddress = '5HjoX44CVrqTpVLqYtiF2cFSmDwtbNUfrbKcEbKDyLnP8NCv';  // 替换为你的接收者地址
  const amount = 1024000000000;  // 替换为你要转账的金额

  // 查询Alice账户的余额
  const { data: balance } = await api.query.system.account(alicePair.address);

  console.log(`Alice's balance is ${balance.free}`);

  // 创建并发送转账交易
  const transfer = api.tx.balances.transferAllowDeath(recipientAddress, amount);
  const hash = await transfer.signAndSend(alicePair, { nonce: 6});

  console.log(`Transfer sent with hash ${hash.toHex()}`);
}

再去查询一下账户有没有收到钱:

import cloud from '@lafjs/cloud'
import { ApiPromise, Keyring } from '@polkadot/api'
import { getAPI } from '@/api'

export default async function (ctx: FunctionContext) {
  const api = await getAPI()

  // 查询Alice账户的余额
  const { data: balance } = await api.query.system.account('5HjoX44CVrqTpVLqYtiF2cFSmDwtbNUfrbKcEbKDyLnP8NCv');

  console.log(`Alice's balance is ${balance.free}`);
}

至此,你已经学会了在 sealos 上启动一个区块链,并借助 laf 进行一些基础开发与链交互,祝大家未来踩缝纫机愉快。下面来点高级的。

链超级管理员配置

超级管理员的钱是从 substrate 的 genesis 也就是创始块的配置文件中得来的:

{
  "name": "Sealchain",
  "id": "sealos_net",
  "chainType": "Live",
  "bootNodes": [
    ],
  "telemetryEndpoints": null,
  "protocolId": null,
  "properties": null,
  "codeSubstitutes": {},
  "genesis": {
    "runtime": {
      "system": {
        "code": 275debf565db8f5318502....980e6412a472c0af5e652d25fa9838a78d0a8449688794d7749638feb6b93e0191ac90b07516"
      },
      "aura": {
        "authorities": [
          "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
          "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty"
        ]
      },
      "grandpa": {
        "authorities": [
          [
            "5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu",
            1
          ],
          [
            "5GoNkf6WdbxCFnPdAnYYQyCjAKPJgLNxXwPjwTh6DGg6gN3E",
            1
          ]
        ]
      },
      "balances": {
        "balances": [
          [
            "5Gh3LUk21PtfZMTnQRZDqGDVwD2mozQdwHyKRj6PW6n9r65C",
            1152921504606846976
          ],

          [
            "5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk",
            1152921504606846976
          ]
        ]
      },
      "transactionPayment": {
        "multiplier": "1000000000000000000"
      },
      "sudo": {
        "key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
      }
    }
  }
}

这个文件大家务必不要复制粘贴,因为里面的 runtime.system.code 字段是编译后的 wasm,所以一定要用命令生成这个文件,在这个文件基础上去修改才行,我被这个问题坑死。

然后 balances 字段就可以配置初始地址里面的资金,这个地址用上面的代码生成就行,私钥你自己保存好,不用触网。配置起来很简单,祝大家财务自由。

然后在 Sealos 里面新增配置,在命令行指定配置文件即可。

自行构建链的容器镜像

有个编译 Rust 的环境,参考这篇文档:https://docs.substrate.io/tutorials/build-a-blockchain/build-local-blockchain/

$ git clone https://github.com/substrate-developer-hub/substrate-node-template
$ cargo build --release
FROM ubuntu:23.10
RUN apt update && apt install --assume-yes git clang curl libssl-dev protobuf-compiler && rm -rf /var/lib/apt/lists/*
COPY ./target/release/node-template .
CMD ./node-template --dev

【友情提醒:搬砖有风险,跑链需谨慎】

标签:await,const,Sealos,api,支付,import,区块,cloud
From: https://www.cnblogs.com/ryanyangcs/p/17897391.html

相关文章

  • 设备指纹技术引入,提升三方支付安全
    随着互联网和移动互联网的发展,三方支付已经成为人们日常生活中不可或缺的一部分。然而,在享受三方支付带来的便利和效率的同时,我们也不能忽视其所面临着多种业务安全挑战。例如,在线交易中可能存在欺诈者利用虚假信息或恶意软件进行盗刷或转账操作;用户或商户在使用三方支付平台时可......
  • 支付宝云开发 H5 页面渲染提升优化实践
    支付宝云开发产品是一款蚂蚁集团独立自研的Serverless小程序一站式开发平台。蚂蚁内部FaaS产品有多年的研发、实践积累,并在内部众多业务线大规模应用,基于蚂蚁FaaS产品蚂蚁团队打造了全新的支付宝云开发产品。云开发产品具备极速弹性能力、高性能、高稳定性,在满足业务场景的同......
  • 聚合支付项目-06
    Mybatis-Plus课程目标:了解Mybatis-Plus整合Mybatis-Plus通用CRUDMybatis-Plus的配置条件构造器Mybatis-Plus的Service封装代码生成器1Mybatis-Plus介绍1.1Mybatis-Plus介绍MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发提高效率......
  • 聚合支付项目-05
    4基础技术栈总结Nacos用来干什么?Nacos是阿里巴巴公司开源的项目,它用来实现配置中心和服务注册中心。什么是服务发现?在微服务架构中一个业务流程需要多个微服务通过网络接口调用完成业务处理,服务消费方从服务注册中心获取服务提供方的地址,从而进行远程调用,这个过程叫做服务发现。......
  • odoo17.0 微信支付 支付宝 顺丰速递 圆通速递
    随着odoo17.0的发布,新代码的架构变动,导致之前的一些模块已经不能使用,因此,我们集中把常用的这几个模块率先进行了升级。本次发布的新模块有:微信支付支付宝支付顺丰速递圆通速递微信支付和支付宝支付我们在安装了在线商城模块之后,在设置-支付提供商中就可以看到微信支付/支......
  • 红米K70E支付宝无指纹支付选项的解决方法
    红米K70E这台手机,支付宝里无指纹支付选项,百度了一下,也没结果。自己摸索了下,终于折腾出了指纹支付。 解决方法:在手机-设置-指纹、面部与密码-指纹解锁-指纹支付-支付宝-更新证书。杀掉支付宝APP,重进支付宝。  OK ......
  • 稳了,终于可以通过外网访问 Sealos 中的数据库了!
    喜大普奔,Sealos中的数据库功能现已全面升级,支持外网访问!现在你可以从互联网的任何地方访问Sealos中的数据库,无论您的应用部署在何种环境,现在都可以轻松通过外网连接到Sealos中的数据库,打破地理限制,提升工作效率和灵活性。目前数据库是通过NodePort暴露到公网,集群的Nod......
  • .NET Core 开发的支付SDK集 - paylink
    一套基于.NETCore开发的支付SDK集-paylink 前言在我们的日常工作开发中对接一些第三方支付是比较常见的,如最常见的就是支付宝、微信支付的对接。今天给大家推荐一个基于.NETCore开发的支付SDK集:paylink,它极大简化了API调用及通知的处理流程从而大大提供我们的工作生......
  • 商品支付流程梳理
    微信支付三种方式流程梳理1.Native方式---PC端Native方式一般是在PC端中使用。先看官方提供的流程图:![Native流程图](C:\Users\pc\Desktop\微信支付\Native流程图.png)根据官方的图来梳理即可:1.1第一步---商户平台内部生成订单信息并展示这一步一般是在用户......
  • Google Play 允许区块链游戏和 NFT 应用进入平台
    为GameFi用户在地域分布与手机机型分布方面与GooglePlay 有众多契合之处:地域分布:东南亚地区用户占比最大,2022年上半年东南亚用户占比达到41%其次是北美和西欧地区用户,2022年上半年占比分别为16%和15%发展中国家用户占比也在快速增长,如菲律宾、越南、印度等机......