账号所有权
通常我们用钱包创建账号时,Owner 是系统账号(11111111111111111111111111111111),在交易时需要通过系统验证交易签名是否由对应的公钥签署而来的。用 Solana Account 命令可以查看账号的基本信息:
这两种账号都可以修改 Owner,但有不同的规则和限制
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
通常我们用钱包创建账号时,Owner 是系统账号(11111111111111111111111111111111),在交易时需要通过系统验证交易签名是否由对应的公钥签署而来的。用 Solana Account 命令可以查看账号的基本信息:
还有一种账号称为 PDA 账号,它是由智能合约派生的账号,主要用于存储智能合约数据,它的 Owner 是派生它的智能合约,例如:用于保存 Token 发行和持有信息的账号就是一种 PDA 账号,用 Solana Account 查看账号基本信息时可以看到它的 Owner 是 Token 智能合约 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA:
这两种账号都可以修改 Owner,但有不同的规则和限制
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
PDA 账号
简单来说 PDA 账号可以修改 Owner,但要求账号的 data 为空,同样是通过 assign 指令进行操作,我们简单测试了一下几种场景下修改 Owner 的反馈:
账号被修改 Owner 后用户就失去了账号的控制权,攻击者可以通过 CPI 调用的方式转移账号资产。
还有一种常见的所有权变更,那就是 Token 账号的所有权,本质上这是一种智能合约内逻辑控制的所有权,不是由 Solana 底层逻辑控制,但它也经常被用于钓鱼攻击,广大用户应警觉这类钓鱼攻击方式。
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
简单来说 PDA 账号可以修改 Owner,但要求账号的 data 为空,同样是通过 assign 指令进行操作,我们简单测试了一下几种场景下修改 Owner 的反馈:
1. 新创建的 PDA 账号,可以任意指定 Owner,如果 Owner 不为创建它的 Program,那么 Program 无写入权限。
2. 创建完成的 PDA 账号试图修改 Owner 时报错:instruction illegally modified the program id of an account。
3. PDA 账号最终 assign 之前试图写入数据:instruction modified data of an account it does not own。
账号被修改 Owner 后用户就失去了账号的控制权,攻击者可以通过 CPI 调用的方式转移账号资产。
还有一种常见的所有权变更,那就是 Token 账号的所有权,本质上这是一种智能合约内逻辑控制的所有权,不是由 Solana 底层逻辑控制,但它也经常被用于钓鱼攻击,广大用户应警觉这类钓鱼攻击方式。
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
双花攻击 Double Spend Attack
双花攻击(Double Spend Attack)即一笔钱花了两次,双重支付,利用货币的数字特性两次或多次使用“同一笔钱”完成支付。双花不会产生新的 Token,但能把自己花出去的钱重新拿回来。简单说就是,攻击者将一笔 Token 转到另外一个地址,通常是转到交易所进行套现,然后再利用一些攻击手法对转账交易进行回滚。目前有常见的几种手法能够引发双花攻击
、
双花攻击(Double Spend Attack)即一笔钱花了两次,双重支付,利用货币的数字特性两次或多次使用“同一笔钱”完成支付。双花不会产生新的 Token,但能把自己花出去的钱重新拿回来。简单说就是,攻击者将一笔 Token 转到另外一个地址,通常是转到交易所进行套现,然后再利用一些攻击手法对转账交易进行回滚。目前有常见的几种手法能够引发双花攻击
、
Race Attack
这种攻击主要通过控制矿工费来实现双花。攻击者同时向网络中发送两笔交易,一笔交易发给自己(为了提高攻击成功的概率,他给这笔交易增加了足够的矿工费),一笔交易发给商家。由于发送给自己的交易中含有较高的手续费,会被矿工优先打包进区块的概率比较高。这时候这笔交易就会先于发给商家的那笔交易,那么发给商家的交易就会被回滚。对于攻击者来说,通过控制矿工费,就实现了同一笔 Token 的“双花”。
Finney Attack
攻击者主要通过控制区块的广播时间来实现双花,攻击对象针对的是接受 0 确认的商家。假设攻击者挖到区块,该区块中包含着一个交易,即 A 向 B 转了一定数量的 Token,其中 A 和 B 都是攻击者的地址。但是攻击者并不广播这个区块,而是立即找到一个愿意接受 0 确认交易的商家向他购买一个物品,向商家发一笔交易,用 A 向商家的地址 C 支付,发给商家的交易广播出去后,攻击者再把自己之前挖到的区块广播出去,由于发给自己的交易先于发给商家的交易,对于攻击者来说,通过控制区块的广播时间,就实现了同一笔 Token 的“双花”。
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
这种攻击主要通过控制矿工费来实现双花。攻击者同时向网络中发送两笔交易,一笔交易发给自己(为了提高攻击成功的概率,他给这笔交易增加了足够的矿工费),一笔交易发给商家。由于发送给自己的交易中含有较高的手续费,会被矿工优先打包进区块的概率比较高。这时候这笔交易就会先于发给商家的那笔交易,那么发给商家的交易就会被回滚。对于攻击者来说,通过控制矿工费,就实现了同一笔 Token 的“双花”。
Finney Attack
攻击者主要通过控制区块的广播时间来实现双花,攻击对象针对的是接受 0 确认的商家。假设攻击者挖到区块,该区块中包含着一个交易,即 A 向 B 转了一定数量的 Token,其中 A 和 B 都是攻击者的地址。但是攻击者并不广播这个区块,而是立即找到一个愿意接受 0 确认交易的商家向他购买一个物品,向商家发一笔交易,用 A 向商家的地址 C 支付,发给商家的交易广播出去后,攻击者再把自己之前挖到的区块广播出去,由于发给自己的交易先于发给商家的交易,对于攻击者来说,通过控制区块的广播时间,就实现了同一笔 Token 的“双花”。
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
签名与加密方式
风险
然而,比特币所使用的算法也并不是毫无瑕疵,至少目前引发了以下问题:
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
风险
加密技术作为一个区块链整体的支柱,其安全性显得尤为重要,例如前些年所流行的MD5和sha1摘要算法,目前已经证明安全性不足,现在已经不能被商用。
所以,公认的高强度加密算法在经过长时间的各方面实践与论证后,已被大家所认可,但不代表其不存在漏洞,不可被破解。
如比特币目前大量使用的是sha256算法,到目前为止,此算法还是安全的,虽然有人依然持有质疑,但是并没有任何直接的公开证据表明此算法存在漏洞。
然而,比特币所使用的算法也并不是毫无瑕疵,至少目前引发了以下问题:
1. sha256算法对应的ASIC矿机以及矿池的出现,打破了中本聪最初设计“一CPU一票”的理念,淘汰了普通GPU挖矿,全网的节点逐渐减少,逐渐趋于中心化。
2. 假名制,通过公共账本你可以查看任意账户的所有交易信息,这显然是和隐私保护背道而驰的,而且在日常的互联网生活中很难不在互联网中留下痕迹,例如:在论坛中发布交易信息,钱包地址就与论坛账户产生了对应关系。门罗币在此方面则优于比特币。
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
软分叉 Soft-fork
硬分叉 Hard-fork
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
软分叉(Soft-fork)更多情况下是一种协议升级,当新共识规则发布后,没有升级的旧节点并不会意识到代码已经发生改变,而继续生产不合法的区块,就会产生临时性分叉,但新节点可以兼容旧节点,即新旧节点始终在同一条链上工作。
硬分叉 Hard-fork
硬分叉(Hard-fork)是区块链发生永久性分歧,在新共识规则发布后,已经升级的节点无法验证未升级节点产生的区块,未升级节点也无法验证已经升级的节点产生的区块,即新旧节点互不兼容,通常硬分叉就会发生,原有正常的一条链被分成了两条链(已升级的一条链和未升级的一条链,且这两条链互不兼容)。
SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
策略模式能在运行时改变程序的算法行为。
定义一个策略接口,计算2个数。根据不同实现算法,可以进行四则运算(完整代码见右边代码区)。
使用Lambda表达式或者方法引用可以去掉样板代码。在这里可以去掉具体的策略实现。
定义一个策略接口,计算2个数。根据不同实现算法,可以进行四则运算(完整代码见右边代码区)。
public class Test {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("1 + 1 = " + context.calculate(1,1));
context = new Context(new OperationSubstract());
System.out.println("1 - 1 = " +context.calculate(1,1));
}
}使用Lambda表达式或者方法引用可以去掉样板代码。在这里可以去掉具体的策略实现。
Context context = new Context((x,y)-> x + y);
System.out.println(context.calculate(1,1));
对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
例子,面向对象的观察者模式(完整代码见右边代码区):
使用Lambda表达式改写:可以去掉具体的观察者。
例子,面向对象的观察者模式(完整代码见右边代码区):
public class Test {
public static void main(String[] args) {
Subject cs = new ConcreteSubject();
//添加观察者
cs.attach(new ConcreteObserver());
//subject发生了某事,通知观察者
cs.doSomeThings();
Subject cs = new ConcreteSubject();
cs.attach(() -> {
System.out.println("我观察到subject发生了某事");
});
//subject发生了某事,通知观察者
cs.doSomeThings();使用Lambda表达式改写:可以去掉具体的观察者。
public class Test {
public static void main(String[] args) {
Subject cs = new ConcreteSubject();
cs.attach(() -> {
System.out.println("我观察到subject发生了某事");
});
//subject发生了某事,通知观察者
cs.doSomeThings();定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
例子:一个工作流程管理类,不同的任务有不同的完成方式由具体子类实现(完整代码见右边代码区)。
利用Java 8的Lambda表达式和默认方法实现模板方法模式。之前已经说过,接口只有在只声明了一个抽象方法的前提下,才可以使用Lambda表达式。
例子:一个工作流程管理类,不同的任务有不同的完成方式由具体子类实现(完整代码见右边代码区)。
public class Test {
public static void main(String[] args) {
initiateWorkFlow(new WorkflowManagerImpl1());
}
private static void initiateWorkFlow(WorkflowManager workflowMgr){
workflowMgr.doTask1();
workflowMgr.doTask2();
workflowMgr.doTask3();利用Java 8的Lambda表达式和默认方法实现模板方法模式。之前已经说过,接口只有在只声明了一个抽象方法的前提下,才可以使用Lambda表达式。
interface WorkflowManager{
default void doTask1(){
System.out.println("Doing Task1...");
}
void doTask2();
default void doTask3(){
System.out.println("Doing Task3...");编译智能合约
.sol的智能合约需要编译成ABI和BIN文件才能部署至区块链网络上。有了这两个文件即可凭借Java SDK进行合约部署和调用。但这种调用方式相对繁琐,需要用户根据合约ABI来传参和解析结果。为此,控制台提供的编译工具不仅可以编译出ABI和BIN文件,还可以自动生成一个与编译的智能合约同名的合约Java类。这个Java类是根据ABI生成的,帮助用户解析好了参数,提供同名的方法。当应用需要部署和调用合约时,可以调用该合约类的对应方法,传入指定参数即可。使用这个合约Java类来开发应用,可以极大简化用户的代码。
# 创建工作目录~/fisco
mkdir -p ~/fisco
# 下载控制台
cd ~/fisco && curl -#LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.2/download_console.sh && bash download_console.sh
# 切换到fisco/console/目录
cd ~/fisco/console/
# 若控制台版本大于等于2.8.0,编译合约方法如下:(可通过bash sol2java.sh -h命令查看该脚本使用方法)
bash sol2java.sh -p org.fisco.bcos.asset.contract
# 若控制台版本小于2.8.0,编译合约(后面指定一个Java的包名参数,可以根据实际项目路径指定包名)如下:
./sol2java.sh org.fisco.bcos.asset.contract