设计模式-拦截过滤器
适用性在以下情况下使用拦截过滤器模式
系统使用预处理或后处理请求
系统应该对请求进行身份验证/授权/记录或跟踪,然后将请求传递给相应的处理程序
需要一种模块化方法来配置预处理和后处理方案
以下是此类设计模式的实体。
过滤器- 过滤器将在请求处理程序执行请求之前或之后执行某些任务。
过滤器链- 过滤器链带有多个过滤器,并帮助在目标上按定义的顺序执行它们。
Target - 目标对象是请求处理程序
过滤器管理器- 过滤器管理器管理过滤器和过滤器链。
Client - Client 是向 Target 对象发送请求的对象。
步骤1创建过滤器界面。
123public interface Filter { public void execute(String request);}
第2步创建认证过滤器。
12345public class AuthenticationFilter implements Filter { public void execute(String request){ System.out.printl ...
IC中的账户及相关操作
账户分类在IC中有如下三个账户:
identity:identity账户是主体标识,其可以与ICP账户(account id)相互映射,并且identity是控制canister的钥匙。
ledger:ledger账户是ICP账户(account id),所有和ICP相关的操作都在ledger中进行。
wallet:wallet账户是部署了cycle wallet程序的canister,identity必须设置了wallet才能部署canister。
principalprincipal 首次使用 DFINITY Canister SDK 时,dfx 命令行工具会使用 PEM 文件中的公钥/私钥对为您创建默认的开发人员身份。开发人员身份是由派生的principal数据类型和代表principal的文本进行表示,也就是principal identifier(主体身份)。
account id开发人员身份还可用于派生出account id(帐户标识符,类似于比特币或以太坊地址),用于在ledger canister中持有 ICP 代币。
walletwallet 在 Inter ...
IC上出色的基础设施(持续更新)
记录一些截止目前我所致比较出色的基础设施,帮助快速开发,避免重复造轮子
基础设施IC-Dataset是一个基于Motoko的数据存储集合,用于交易消息可以实现跨合约的分布式事务管理和TCC模式的数据采集。
仓库:https://github.com/ICPSwap-Labs/ic-dataset
ICME开发者推出水平可扩展的NoSQL数据库
https://forum.dfinity.org/t/candb-the-first-scalable-nosql-database-on-the-internet-computer/13984?u=mike1
ic4j-agent是一个用于远程连接IC的本地 Java 库
https://github.com/ic4j/ic4j-agent
Azle(TypeScript CDK)
https://github.com/demergent-labs/azle
Sudograph(GraphQL数据库)
https://github.com/demergent-labs/sudograph
开发指导网站motoko语言指导
https://hd ...
IC 入门课第二课
课程大纲
使用 SDK 搭建一个简易网站
Motoko 语言简介
Canister 智能合约
用 Motoko 做后端
用 Javascript 做前端
第二课-课程要求用 motoko 实现一个快排函数:quicksort : [var Int] -> ()要求:
用 moc 调试运行
把函数封装在一个 canister 里面 public func qsort(arr: [Int]): async [Int]
部署到主网
使用主网的 Candid UI 调试运行 https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.ic0.app
课程内容回顾ICP上的智能合约
Motoko 编程语言基本介绍ICP 为什么需要一门新的语言?
不是必须的,C, C++, Rust 都可以编译到 Wasm
缺少一个高级语言同时满足:安全、高效、容易上手
适配平台特性:Actor 模型、权限管理、代码升级、跨语言调用
1.Motoko 语言的特点
静态类型,语法接近 JavaScript/TypeScript
面向对象,但不支持继承
支持 await/async ...
IC 入门课第一课
课程大纲
使用 SDK 搭建一个简易网站
Motoko 语言简介
Canister 智能合约
用 Motoko 做后端
用 Javascript 做前端
第一课-课程要求
使用 SDK 搭建一个简易网站dfx new –no-frontend
领取 cycles 钱包
将网站部署到 ic0.app 主网
思考题:假如开发团队不再维护代码了,用户该怎么办?
DFINITY 开发者中心,下载 DFINITY Canister SDK1sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)"
使用 DFINITY Canister SDK12345678910111213141516171819# 1. 新建项目 # 将以下命令中 <project_name> 替换成自己的项目名称 dfx new <project_name> --no-frontend # 2. 启动项目,加上 --backgroud 可以运行在后台 dfx start # 3. ...
区块链共识机制:POW、POA、POS、DPOS、PBFT、DBFT
由于区块链的去中心化的特性,没有中心记账节点,需要全网对账本达成共识,因此共识机制作为区块链的关键技术之一,在业务吞吐量、交易速度、不可篡改性、准入门槛等等方面发挥重要的作用。
本次笔记归纳如下几种共识算法:
POW,工作量证明
POS,权益证明
DPOS,授权POS
POA,权威证明
PBFT,实用拜占庭容错算法
DBFT,授权拜占庭容错算法
问题场景区块链技术中非对称加密和可信的分布式网络解决拜占庭将军问题中的共识问题。
非对称加密可以解决古代难以解决的签名问题:
消息传送的私密性
能够确认身份
签名不可伪造、篡改
作用:保护消息内容, 并且让消息接收方确定发送方的身份。
分布式记账场景
下面开始归纳现区块链主流共识算法(机制)
PoW(Proof of Work,工作量证明)“解决一道数学难题”,**“机器性能越好,挖矿时间越长,获得的回报也越多。”**
类型:竞争共识
概念:工作量证明,引入了对一个特定值的计算工作。****
POW共识算法应用场景:比特币(BTC)及其引申出来的BCH、BCD等
算法工作描述:
矿工们在挖一个新的区块时,必须对SHA-256密码散列 ...
IC开发入门常见问题
访问不到钥匙,文件等问题检查之前命令行是否用了 sudo或者之前是root, 现在用了其他用户
进入私钥目录1cd ~/.config/dfx/identity/
1.dfx deploy 运行报错可能是没有运行开发环境:
123dfx stop && dfx start 或者 dfx stop && dfx start --background或者 dfx stop && dfx start --clean (清除当前项目的状态)
2.在原来canister发布新版本是否需要加上 –with-cycles=xxxx不需要
3.motoko 打印arrayDebug.print(debug_show(arr));
4.motoko 语法检查dfx build –check
5.跨 Canister 调用是否有 Timeout 的机制?以防止某个调用不返回导致主调 Canister 无法停止。timeout 仅发生在对方子网下线的情况下,其它情况则需要等待对方返回,系统保证它终将返回,可能很久。
6.冻结时,如果有未返回的跨 Cani ...
IC区块链与经济模型
Dfinity区块链与经济模型Dfinity(下称ICP区块链)是一条不保留旧区块的区块链,其通过运行ICP协议来链接节点,形成区块链系统
在ICP区块链中,主要有两种代币:
Cycle:
价值与XDR进行锚定,XDR是综合一系列法币进行加权求和得到的值,可以认为是稳定币。
作用主要是为给Canister充值,维持Canister运行
ICP:
可以通过兑换为Cycle,“充值”给Canister(智能合约容器),维持Canister的运行。
质押ICP,成为神经元,参与投票。投票可以得到新的ICP,可以认为是“投票挖矿”
子网
在ICP区块链中,分布在世界各地的节点通过NNS被划分为若干子网。每个节点可以参与多个子网。每个子网都是一个单独的区块链,运行ICP协议,达成共识。不同于以太坊分片策略的是,ICP区块链没有“母网”,只有不同的子网。
NNS可以对子网进行重新组合,重新生成与恢复
ChainKey
阈值签名:子网的节点对信息进行签名的算法是阈值BLS,一个子网中,对一个信息达成共识的条件是2f+1(总量3f)个节点使用自己的子密钥对一个信息进行签名,达成条件后即可生成 ...
常用软件的docker-compose安装文件
使用docker-compose安装一些常用软件Mysqldocker-compose.yaml
12345678910111213141516171819version: '2'services: mysql-service: restart: always image: mysql:8.0.15 container_name: mysql ports: - 3307:3306 environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: Xc58525456 command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --low ...
IC-dfx常用指令
安装dfx sdk安装最新版:
sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"
安装指定版本:
DFX_VERSION=0.9.3 sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"
dfx常用指令identity1234567dfx identity list #identity 列表dfx identity get-principal #获取当前的PIDdfx ledger account-id #接收转账的account-iddfx --identity default ledger --network ic balance #当前账户还有多少ICPfx --identity xxxx ledger --network ic transfer --memo 0 --amount 0.5 $(dfx --identity default ledger account-id) #从一个账户转账到另一个账户dfx i ...