首页
学习
活动
专区
圈层
工具
发布

原子交换技术规范

上一篇讲解了原子交换技术的历史、应用场景、优缺点等,本篇主要用于描述原子交换技术的规范,以Binance链与Ethereum之间的交互进行描述。...概述 原子交换技术中,最关键的技术为加密哈希函数与HTLC功能,通过一个随机数作为哈希原像,在跨链原子交换技术时起到可信因子的作用。...链上发布一笔携带SwapID与私密随机数的确认交易,来获取Binance上的交换资产 上述描述的流程为 Binance链上的用户A与Ethereum链上的用户B进行原子交换的大概步骤,其中省略了大量的必须参数...链当前不支持智能合约,为了与Ethereum链上的资产进行原子交换,Binance链上提供了一套特殊的HTLC交易,用于在链上锁定资产和获取原子交换的资产;交易的细节在下文描述。...该过程与上述资产交换过程相反。

84910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    区块链的原子交换技术

    概述 原子交换是一种基于智能合约的技术,可以使不同区块链上资产/Token在不依赖中心化交易所或第三方的情况下进行交换。该技术也可以成为跨链原子交换。...虽然Tier Nolan大多数情况下被认为是原子交换的发明者,但实际上跨链原子交换的想法在他提出之前已经被人们热议。...去中心化:原子交换技术不需要一个中心化的交换场所,所以使用交换时的成本非常低(如:交易费、提款手续费等...) 抗欺骗:原子交换技术可以防止欺骗发生,没有任何办法对原子交换的参与方进行勒索。...使用了哈希时间锁HTLC与加密哈希函数进行保证。HTLC技术保证交换要么全部成功,或者全部失败。...后记 下一篇将描述原子交换的技术;主要基于Binance Chain与Ethereum进行讲解。

    64730

    【C++】C++入门 — 指针空值nullptr

    C++入门 指针空值 指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。...#endif #endif 可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。...程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖 在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量...注意: 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的 在C++11中,sizeof(nullptr) 与 sizeof((void)0)所占的字节数相同...为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr

    42610

    C++入门----内联函数&&auto&&范围for&&nullptr指针

    我们显然是想让数组里面的每个数字都乘以2,但是打印的结果却并不是我们想要的,这个原因就是我们的e就是一个中间变量,e的改变并不会影响我们的数组里面的元素的值,如果我们想要实现这个功能使用引用就可以了,这个时候的e就是别名,相当于指针...,变化就会同步到我们的数组元素上面去了: 4.nullptr 这个也是C++相对于C语言的改进之处,我们的NULL实际上在标准库里面就是被宏定义为0: 因此我们使用函数的重载调用函数的时候,NULL会被当做...int类型,而不是指针类型; 但是nullptr可以解决这个问题,因此我们在C++里面通常使用nullptr而不是NULL。

    19410

    C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字

    底层汇编语言里 引用与指针是一样的 都是指针 引用与指针的不同点 引用概念上定义一个变量的别名,指针存储一个变量地址。...指针空值nullptr(C++11) C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。...不论采取何 种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的 初衷相悖...在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。 2....在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

    52510

    并发基础之原子操作与原子变量

    既然错误是因为++不是一个原子操作而导致的,那么我们想办法使其成为原子操作就可以了,因此我们可以: 加锁; 使用原子变量。 来解决上述问题。...下面我们来试试使用原子变量。...要想找到答案,就得分析原子变量提供的原子操作是怎么实现的。 下面我们首先来看Java中的实现,然后分析gcc的实现。...加到了一个内存中的值(变量a)之上,看起来好像只有1次内存访问,但事实上这条指令需要进行了2次内存访问:首先从内存中读取a的值,然后求和并把求和结果存入变量a之中,即: 从内存读取变量a的值到寄存器 与2...最后简单的总结一下Java以及gcc对原子变量的实现:Java中用的是循环使用CAS操作实现的原子变量的原子操作,而gcc使用的是xadd指令,可以看出gcc的实现方式更加简洁,应该也更高效,另外,go

    1.8K20

    如何进行一次真正的原子交换

    so-how-do-i-really-do-an-atomic-swap-f797852c7639 译者微博:@从流域到海域 译者博客:blog.csdn.net/solo95 Atiomic Swap, 直译原子交换...//en.wikipedia.org/wiki/Atomic_swap,另外比特币专门有一个wiki网站:https://en.bitcoin.it/wiki/Main_Page) 如何进行一次真正的原子交换...Viacoin和Litecoin之间真正的原子交换(Viacoin、Litecoin是2种不同的比特币) Crypto,Crypto,Crypto,现在大多数人都在谈论加密,加密技术的消亡,加密技术的革命...让我们实际做一次原子交换 要求: 2x VPS(Digital Ocean,Vultr ...)或2台机器。...就在这时,比特币被解锁,原子交换完成。 该技术将真正实现去中心式交换,原子互换相当于没有信任机制和去中心的外汇交易。(去中心是指不需要像银行或者交易中心等第三方参与,也有分散交易的意思。)

    1.7K60

    【c++入门】引用详解 | auto的类型推导 | 范围for循环 | nullptr空指针

    ☁️使用场景 ⭐做参数 在没有引用前,我们交换两个变量的值需要使用指针来完成。现在可以使用引用来完成了。 ⭐做返回值 上面是一段有问题的代码!...☁️指针和引用的区别 引用在很多地方好像与指针类似,这里来区分他们二者的不同....⭐引用与指针的不同点 引用概念上定义一个变量的别名,指针存储一个变量地址。...nullptr 是一个特殊的空指针常量,具有空指针类型。使用 nullptr 可以避免一些与整数常量 0 相关的问题,提供更好的类型安全性。...在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 为了提高代码的健壮性,表示指针空值时建议最好使用nullptr。 ️

    1K10

    无锁数据结构

    CAS(Compare-And-Swap)操作是无锁编程中的常用实现方式之一,其通过原子比较和交换数据来实现安全的多线程数据更新。本文将主要探讨CAS操作在无锁编程中的应用及其实现方法。 2....如果使用普通的赋值操作,很难确保数据的原子性更新。CAS操作通过以下三个步骤实现线程安全的数据更新: 比较:将变量的当前值与预期值进行比较。...交换:如果变量的当前值与预期值相等,则将该变量更新为新值。 失败重试:如果变量当前值与预期值不相等,表示变量已被其他线程修改,当前线程需要重试。...) {} }; std::atomic head(nullptr); // 队列头指针 std::atomic tail(nullptr); // 队列尾指针 void push...push(3); print_queue(); std::cout << "Popped: " << pop() << "\n"; print_queue(); } head 和 tail 原子指针

    47510

    掌握线程安全之道:线程互斥与同步技术解析

    --ticket操作本身就不是一个原子操作。 为什么--ticket不是原子操作?...为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的 总线周期也有先后,...然后,让寄存器与内存上的数据mutex交换数据,在交换数据的时候,由于这个操作只有一条汇编代码,所以这个操作是原子的,这个交换不会被打断,也就是此时mutex上的值一定会被传递给进程。...而交换指令就只是一条汇编指令,一个线程要么执行了交换指令,要么没有执行交换指令,所以申请锁的过程是原子的。...申请锁实际就是,把内存中的mutex通过交换指令,原子性的交换到自己的al寄存器中。

    41210

    C++智能指针详解(共享指针,唯一指针,自动指针)

    ; C++标准库提供了针对共享指针的原子接口; 针对共享指针本身的操作是原子的,并不包含该指针引用的具体值 atomic_is_lock_free(&point) //如果point的原子接口是没上锁的...检查唯一指针是否拥有对象的三种方法: //调用操作符bool() if (uq) //如果uq不为空 { cout << *uq << endl; } //与nullptr进行比较 if (uq...的所有权,放弃先前拥有的对象的所有权) wp.swap(wp2) 交换wp和wp2的指针 swap(wp1,wp2) 交换wp1和wp2的指针 wp.reset() 放弃拥有对象的所有权(如果有的话),...sp(sp2) 创建与sp2共享所有权的共享指针 shared_ptr sp(move(sp2)) 创建一个共享指针,该共享指针拥有先前由sp2拥有的指针(sp2之后为空) shared_ptr sp...()) up1.swap(up2) 交换up1和up2的指针和删除器 swap(up1,up2) 交换up1和up2的指针和删除器 up.reset() 调用拥有者对象的删除器,并使其为空(相当于up

    2.5K20

    【C++掌中宝】C++ 中的空指针救世主——nullptr

    nullptr 是一个关键字,代表一种特殊类型,使用nullptr定义空指针可以避免类型转换的问题,因为它只能转换为任意指针类型,但不能转换为整数类型。...4. nullptr 与 NULL 的区别 虽然 NULL 仍然可以在 C++ 中使用,但它在特定场景下会引发错误或误解。...相比之下,nullptr 是一种更加安全且明确的选择: 在C++中NULL 通常是整数 0,会引发二义性问题。 nullptr 是一个指针常量,可以隐式转换为任意指针类型,不会引发二义性问题。...为了消除这些问题,C++11 引入了 nullptr,作为一种类型安全的空指针表示。 在现代 C++ 编程中,强烈推荐使用 nullptr 代替 NULL,确保代码在空指针处理上更加明确和安全。...结语 通过本文,读者应当已经掌握了 nullptr 的基本概念、与 NULL 的区别以及如何在实际编程中应用它。如果你还在用 NULL,是时候拥抱 nullptr,让你的代码更加健壮吧!

    59210

    指针(二)-指针与数组

    指针(二)-指针与数组 一 指针数组 数组元素类型为指针的数组(存储内容为指针) #include int main() { /* 指针数组 */ // 1 定义几个int类型的变量 int a..., b, c; a = 1; b = 2; c = 3; // 2 定义几个int*类型的指针 int* pa, * pb, * pc; pa = &a; pb = &b; pc = &...c; // 3 定义一个数组 数组元素是int*类型的指针 长度为3 // 元素类型 数组名[长度] = {}; int* arr[3] = { pa, pb, pc }; // 访问数组元素...指向数组的指针 #include int main() { /* 数组指针 */ // 1 定义一个数组 int arr[5] = { 1, 2, 3, 4, 5 }; // 2 定义一个指针指向数组...arr // 指针指向的类型* 指针名 ; int(*p)[5] = &arr; // 定义了一个指针p // p指向的类型:int [5] (是一个数组) // p本身的类型:int(

    54520

    C:数组与指针,指针与const

    数组与指针 我们都知道一个指针是代表的一个地址,指针,顾名思义,指向一块区域。那么数组呢?数组并不是代表一堆变量,数组其实也是一种指针,指向一个地址,一般是指向数组的首地址,也就是 a[0]的地址。...a==&a[0] a 是一个指针,指向数组 a 的首地址。 下面四种函数原型都是等价的,第一个参数均为一个地址(指针)。...我们一直说数组是一个指针,那么它究竟是一个什么样的指针? 数组其实是一个 const 指针,什么意思?就是一个常量指针,它的地址被定义后将不能够改变。...编译器无法通过,因为数组指针是一个常量,它的地址将无法改变,相当于int * const b; 指针与 const 指针与 const 之间会发生很多不同的情况,定义指针时,const 所在的位置不同,...1.指针是 const 顾名思义,就是指针是一个常量,指针本身无法被改变,数组就是一个很好的例子,它就是一个常量指针,所以我们无法对他进行更改。

    1.1K10

    指针(2)--指针与数组

    所以其实满足这样的关系式: arr[i]==*(arr+i)==*(i+arr)==i[arr](满足交换律) 数组元素的访问在编译器处理的时候,也是转换成首元素的地址+偏移量求出元素的地址,然后解引用来访问的...正是因为函数的参数部分是本质是指针,所以在函数内部是没办法求数组元素个数的。 4.二级指针/多级指针 指向某一个变量的地址就是指针,当这个变量本身不是指针时,那么这里的指针叫做一级指针。...我们知道,指针变量是指向某一类型数据的内存地址的变量,它作为变量的本质是不会改变的。 那么只要是变量就会有地址。 所以指针变量的地址就叫做二级指针。它是指向指针的指针。...既然二级指针是指向指针的指针,那么肯定就有指向二级指针的指针,被称为三级指针,还有四级指针五级指针...它们都被统称为多级指针。...6.指针数组与数组指针 指针数组是元素是指针的一类数组,它的本质是数组。 数组指针是指向某个数组的指针,它的本质是指针。 7.指针数组与普通数组的联系 1.

    25410
    领券