W3.Hitchhiker aims to discover cutting-edge tech and innovative teams by first principles thinking and long-term analysis strategies.
Quarter I 2022
原文作者:Ansem(推特@blknoiz06) 原文链接:Quarter I 2022always keep a few gems in your pockethttps://blknoiz06.substack.com译者:Evelyn、AluAyi、Henson、Rex|W3.Hitchhiker2022市场整体展望你好!对于我的堕落同胞(fellow degenerates)和其他不知何故闯入这个页面的读者们,我将尝试在这里梳理今年一季度的一些想法。这是我第二次写这样的长篇大论,所以请忍耐一下(哈哈),希望它比从我推特发出来的数百条零零散散的推文更有条理。 2021年对于加密资产来说很显然是突破性的一年,从机构接受度到散户采纳度,加密货币已经远远超过了其历史上的任何时期。加密资产经历了两年的强劲牛市,部分原因是FED的鸽派态度助长了市场参与者的风险偏好,再加上web3协议的快速创新。令人震惊的是,在这个周期中,我们能从这则典型的新闻吹嘘 "看这个代币上涨了10倍"体会到加密货币在社会中的流行程度。Visa购置了一个朋克,阿迪达斯买了一只无聊猴,许多TradFi公司如Jum...

Arweave—不仅仅是存储这么简单
项目简介Arweave 是个非典型或非主流方向的区块链项目,我们之前对其一无所知,稍有了解的人,可能也就是把它看作是众多类似 Filecoin 的去中心化存储项目之一。所以也造成了之前我们对Arweave的一些忽视,今天就好好的把整个项目重新再认识一下。 Arweave 协议的愿景是提供去中心化、可扩展和永久的链上数据存储(永存);就像以太坊被认为是世界计算机,Arweave 可以被认为是永远不会忘记的世界硬盘。创始人Arweave创始人兼CEO—Sam Williams是去中心化爱好者,在分布式系统设计和实施方面具有丰富的经验。英国人,黑客,博士,目前推特关注者15K。先简单了解Filecoin的方案Filecoin是去中心化存储赛道最知名的项目,我们聊Arweave肯定免不了先来了解下Filecoin。 首先,我们知道,Protocol Labs开创的IPFS 是去中心化存储领域的开创者 ,从 2014 年上线开始,自由生长,已经存储了大量的数据。但是要让 IPFS 成为商业可用的存储系统,而不是随意的数据分享平台,必须提供服务质量保障 ,这就是 Filecoin 要解决的问...

Lyra - Option AMM Pioneer
Created by Jack Ding|W3.HitchhikerAn Overview of On-chain OptionsAt present, there are three main types of on-chain options:OrderbookDeFi Option Vaults(structured products)Auto-market Marker(resource:https://www.panewslab.com/zh/articledetails/1644045861942159.html)Orderbooke.x.:Zeta,Psyoption,Opyn Option order books also require high tps blockchain to guarantee cheap and fast execution. Opyn used the Orderbook model on ETH main chain, but due to the lack of liquidity and high gas costs,trade...
Quarter I 2022
原文作者:Ansem(推特@blknoiz06) 原文链接:Quarter I 2022always keep a few gems in your pockethttps://blknoiz06.substack.com译者:Evelyn、AluAyi、Henson、Rex|W3.Hitchhiker2022市场整体展望你好!对于我的堕落同胞(fellow degenerates)和其他不知何故闯入这个页面的读者们,我将尝试在这里梳理今年一季度的一些想法。这是我第二次写这样的长篇大论,所以请忍耐一下(哈哈),希望它比从我推特发出来的数百条零零散散的推文更有条理。 2021年对于加密资产来说很显然是突破性的一年,从机构接受度到散户采纳度,加密货币已经远远超过了其历史上的任何时期。加密资产经历了两年的强劲牛市,部分原因是FED的鸽派态度助长了市场参与者的风险偏好,再加上web3协议的快速创新。令人震惊的是,在这个周期中,我们能从这则典型的新闻吹嘘 "看这个代币上涨了10倍"体会到加密货币在社会中的流行程度。Visa购置了一个朋克,阿迪达斯买了一只无聊猴,许多TradFi公司如Jum...

Arweave—不仅仅是存储这么简单
项目简介Arweave 是个非典型或非主流方向的区块链项目,我们之前对其一无所知,稍有了解的人,可能也就是把它看作是众多类似 Filecoin 的去中心化存储项目之一。所以也造成了之前我们对Arweave的一些忽视,今天就好好的把整个项目重新再认识一下。 Arweave 协议的愿景是提供去中心化、可扩展和永久的链上数据存储(永存);就像以太坊被认为是世界计算机,Arweave 可以被认为是永远不会忘记的世界硬盘。创始人Arweave创始人兼CEO—Sam Williams是去中心化爱好者,在分布式系统设计和实施方面具有丰富的经验。英国人,黑客,博士,目前推特关注者15K。先简单了解Filecoin的方案Filecoin是去中心化存储赛道最知名的项目,我们聊Arweave肯定免不了先来了解下Filecoin。 首先,我们知道,Protocol Labs开创的IPFS 是去中心化存储领域的开创者 ,从 2014 年上线开始,自由生长,已经存储了大量的数据。但是要让 IPFS 成为商业可用的存储系统,而不是随意的数据分享平台,必须提供服务质量保障 ,这就是 Filecoin 要解决的问...

Lyra - Option AMM Pioneer
Created by Jack Ding|W3.HitchhikerAn Overview of On-chain OptionsAt present, there are three main types of on-chain options:OrderbookDeFi Option Vaults(structured products)Auto-market Marker(resource:https://www.panewslab.com/zh/articledetails/1644045861942159.html)Orderbooke.x.:Zeta,Psyoption,Opyn Option order books also require high tps blockchain to guarantee cheap and fast execution. Opyn used the Orderbook model on ETH main chain, but due to the lack of liquidity and high gas costs,trade...
W3.Hitchhiker aims to discover cutting-edge tech and innovative teams by first principles thinking and long-term analysis strategies.

Subscribe to W3.Hitchhiker

Subscribe to W3.Hitchhiker
Share Dialog
Share Dialog
>100 subscribers
>100 subscribers
作者:Xiang|W3.Hitchhiker
修订:Evelyn|W3.Hitchhiker
(↑点击此链接框,打开文档)
SmartWeave 使用 AR 代币使开发人员能够使用 Javascript 构建所有类型的智能合约应用程序。
SmartWeave 合约是用 JavaScript 编码的(前端开发语言),不需要像学习 Solidity 那样学习新的编程语言。
在以太坊上,将合约更新到最新状态的客户端是矿工,而在 Arweave 上,每次都会在客户端上更新状态。所以构建 SmartWeave 合约得注意,使用SmartWeave 并不适用所有的dapp。
由于 SW 合约本身是在客户端更新的,为了获取合约的最新状态,客户端需要通过每次交互来找到其最新的有效状态。与使用ardb从 Arweave 获取交易等其他选项相比,可能会很慢。
SmartWeave 合约分为三部分:
合约源 (the contract source)
状态 (the state)
执行者 (SmartWeaveJS)
为了评估合约状态,SmartWeave 协议客户端:
将所有合约的交互交易加载到请求的区块高度。
对交互事务进行排序。交互的顺序首先由交互交易区块高度(即交易在链中被挖掘的时间)决定,其次由sha256(transactionId + blockHash). 完整的顺序是[ block_height, sha256(transactionId + blockHash) ].
将排序后的交互应用到合约的handler功能上——评估合约的状态直到请求的区块高度。
合约源就是代码本身,用 JavaScript 编写。这是将在客户端(执行者)上运行以更新状态并获取最新且有效的状态的合约。合约它定义了项目将是什么,以及您希望它做什么。
合约源永远不会改变,这可以保证用户使用的东西永远是真实的。
状态通常是写合约的第一件事,让我们编写一些简单的代码测试,每次调用increment函数时都会增加调用者的余额。 caller 是与该合约源交互的钱包地址。
export function handle(state, action) {
const balances = state.balances;
const input = action.input;
const caller = action.caller;
if(input.function === 'increment') {
// If the caller already is a key of balances, increment, if not, set it to 1.
if(caller in balances) {
balances[caller]++;
} else {
balances[caller] = 1;
}
}
}
(该文件保存为first.js。)
所有 SmartWeave 合约都必须以函数(state,action){} 开头,因为这是执行程序调用的函数。其他所有内容都应该在该handle函数中。
现在handle本身很混乱,因为我们不知道state和action参数是什么。我们先解释一下这个action。 动作参数 action 是在执行 SmartWeave 合约时发送的动作,每次你想要对 SW 合约进行更新时,你都需要发送输入交易,这通常包括函数名称input.function和任何其他参数你需要和它一起发送。目前这种情况下,我们不需要发送任何其他内容,但例如我们可以发送input.qty来指定我们想要增加余额的数量,这也需要在合约源代码中指定才能正常工作。请记住,这是由钱包所有者控制的,因此我们需要在接收用户数据时始终具备条件,以防止出现意外的情况。
动作参数也将调用者作为该对象的键。同样,调用者是运行该函数的人。这是唯一起作用的两个键:action: input and caller.
状态是合约状态,它让用户知道你的合约的更新是什么,以及它在哪里,在执行的那一刻。 这个会随着时间的推移(在客户端)更新,而合约源永远不会改变。 当我们第一次创建合约时,我们还需要发送一个状态,也就是初始状态。
我们可以在我们的合约源中看到,状态是一个 balances 对象,其中包括钱包地址(caller)作为键,并且每个调用者键都有一个数字作为其值。 在这个例子中,让我们为自己添加一些余额作为初始状态,状态是一个 JSON 对象:
{
"balances": {
"S2aewhZzchiyRsAisLAdZKudF6r9JlO_WDSGkaLGMZ4": 10000
}
}
(该文件保存为first.json)
这表明当第一个人去读我们的合约时,第一个状态是这个地址有 1,000 个该代币余额。
状态和合约源都必须是发送到 Arweave 的单独交易,并且都只部署一次。 之后,通过发送包含input交易来更新状态。
在说执行者之前,我们先来看看应该如何处理合约源和初始状态。 这两个都只是普通的交易,但带有一些特殊的标签。 我们可以使用 SmartWeaveJS 作为 CLI 工具来部署这些合约。
首先安装smartweave包(建议使用最新的稳定node版本):
npm install -g smartweave
然后可以通过以下指令部署合约:
smartweave create [SRC LOCATION] [INITIAL STATE FILE] --key-file [YOUR KEYFILE]
SRC LOCATION 是指的合约源,INITIAL STATE FILE是初始状态文件,YOUR KEYFILE 是指生成钱包时的keyfile文件。参考下图配置:

交易ID: _PMfm736sE_pqPS-FQvYgkwqbm-8VJBPGlQRTm89ZBE
读取合约状态:
smartweave read [CONTRACT TXID]

这样就成功部署了您的第一个 SmartWeave 合约。
与合约交互(写合约):
smartweave write [CONTRACT TXID] --key-file [YOUR KEYFILE] \
--input "[CONTRACT INPUT STRING HERE]"
如果要测试不写入主网,与测试网络交互,请将 --dry-run 附加到 --interact 调用中.
但由于我们是来学习的,所以也可以了解下使用 ArweaveJS 手动创建这些交易。参考以下代码:
import Arweave from 'arweave';
const arweave = Arweave.init({
host: 'arweave.net',
protocol: 'https',
port: 443
});
async function createContract() {
// Let's first create the contract transaction.
const contractTx = await arweave.createTransaction({ data: contractSource }, wallet);
contractTx.addTag('App-Name', 'SmartWeaveContractSource');
contractTx.addTag('App-Version', '0.3.0');
contractTx.addTag('Content-Type', 'application/javascript');
// Sign
await arweave.transactions.sign(contractTx, wallet);
// Let's keep the ID, it will be used in the state transaction.
const contractSourceTxId = contractTx.id;
// Deploy the contract source
await arweave.transactions.post(contractTx);
// Now, let's create the Initial State transaction
const initialStateTx = await arweave.createTransaction({ data: initialState }, wallet);
initialState.addTag('App-Name', 'SmartWeaveContract');
initialState.addTag('App-Version', '0.3.0');
initialState.addTag('Contract-Src', contractSourceTxId);
initialState.addTag('Content-Type', 'application/json');
// Sign
await arweave.transactions.sign(initialState, wallet);
const initialStateTxId = initialState.id;
// Deploy
await arweave.transactions.post(initialState);
}
createContract()
类似于以太坊的remix,AR也有自己的网页端部署工具
(↓点击此链接框,打开网页)

点击左下方登陆钱包,这里可以下载AR的钱包插件ArConnect进行连接,如果没有,可以先去下载。
进入后可以使用studio自带的代币合约部署,然后点击坐上的火箭图标进行部署。
此时需要选择部署的钱包,方法,部署网络,合约源,合约初始状态等。

部署成功后会获取交易ID
TX: YdVWeK5ftuIBmCTEbNQCwSFT13KZIJsuJ6OaVqjFvoY
这样就成功部署token-pst合约了。
与合约交互,读取合约数据:

与合约交互,写合约数据:

作者:Xiang|W3.Hitchhiker
修订:Evelyn|W3.Hitchhiker
(↑点击此链接框,打开文档)
SmartWeave 使用 AR 代币使开发人员能够使用 Javascript 构建所有类型的智能合约应用程序。
SmartWeave 合约是用 JavaScript 编码的(前端开发语言),不需要像学习 Solidity 那样学习新的编程语言。
在以太坊上,将合约更新到最新状态的客户端是矿工,而在 Arweave 上,每次都会在客户端上更新状态。所以构建 SmartWeave 合约得注意,使用SmartWeave 并不适用所有的dapp。
由于 SW 合约本身是在客户端更新的,为了获取合约的最新状态,客户端需要通过每次交互来找到其最新的有效状态。与使用ardb从 Arweave 获取交易等其他选项相比,可能会很慢。
SmartWeave 合约分为三部分:
合约源 (the contract source)
状态 (the state)
执行者 (SmartWeaveJS)
为了评估合约状态,SmartWeave 协议客户端:
将所有合约的交互交易加载到请求的区块高度。
对交互事务进行排序。交互的顺序首先由交互交易区块高度(即交易在链中被挖掘的时间)决定,其次由sha256(transactionId + blockHash). 完整的顺序是[ block_height, sha256(transactionId + blockHash) ].
将排序后的交互应用到合约的handler功能上——评估合约的状态直到请求的区块高度。
合约源就是代码本身,用 JavaScript 编写。这是将在客户端(执行者)上运行以更新状态并获取最新且有效的状态的合约。合约它定义了项目将是什么,以及您希望它做什么。
合约源永远不会改变,这可以保证用户使用的东西永远是真实的。
状态通常是写合约的第一件事,让我们编写一些简单的代码测试,每次调用increment函数时都会增加调用者的余额。 caller 是与该合约源交互的钱包地址。
export function handle(state, action) {
const balances = state.balances;
const input = action.input;
const caller = action.caller;
if(input.function === 'increment') {
// If the caller already is a key of balances, increment, if not, set it to 1.
if(caller in balances) {
balances[caller]++;
} else {
balances[caller] = 1;
}
}
}
(该文件保存为first.js。)
所有 SmartWeave 合约都必须以函数(state,action){} 开头,因为这是执行程序调用的函数。其他所有内容都应该在该handle函数中。
现在handle本身很混乱,因为我们不知道state和action参数是什么。我们先解释一下这个action。 动作参数 action 是在执行 SmartWeave 合约时发送的动作,每次你想要对 SW 合约进行更新时,你都需要发送输入交易,这通常包括函数名称input.function和任何其他参数你需要和它一起发送。目前这种情况下,我们不需要发送任何其他内容,但例如我们可以发送input.qty来指定我们想要增加余额的数量,这也需要在合约源代码中指定才能正常工作。请记住,这是由钱包所有者控制的,因此我们需要在接收用户数据时始终具备条件,以防止出现意外的情况。
动作参数也将调用者作为该对象的键。同样,调用者是运行该函数的人。这是唯一起作用的两个键:action: input and caller.
状态是合约状态,它让用户知道你的合约的更新是什么,以及它在哪里,在执行的那一刻。 这个会随着时间的推移(在客户端)更新,而合约源永远不会改变。 当我们第一次创建合约时,我们还需要发送一个状态,也就是初始状态。
我们可以在我们的合约源中看到,状态是一个 balances 对象,其中包括钱包地址(caller)作为键,并且每个调用者键都有一个数字作为其值。 在这个例子中,让我们为自己添加一些余额作为初始状态,状态是一个 JSON 对象:
{
"balances": {
"S2aewhZzchiyRsAisLAdZKudF6r9JlO_WDSGkaLGMZ4": 10000
}
}
(该文件保存为first.json)
这表明当第一个人去读我们的合约时,第一个状态是这个地址有 1,000 个该代币余额。
状态和合约源都必须是发送到 Arweave 的单独交易,并且都只部署一次。 之后,通过发送包含input交易来更新状态。
在说执行者之前,我们先来看看应该如何处理合约源和初始状态。 这两个都只是普通的交易,但带有一些特殊的标签。 我们可以使用 SmartWeaveJS 作为 CLI 工具来部署这些合约。
首先安装smartweave包(建议使用最新的稳定node版本):
npm install -g smartweave
然后可以通过以下指令部署合约:
smartweave create [SRC LOCATION] [INITIAL STATE FILE] --key-file [YOUR KEYFILE]
SRC LOCATION 是指的合约源,INITIAL STATE FILE是初始状态文件,YOUR KEYFILE 是指生成钱包时的keyfile文件。参考下图配置:

交易ID: _PMfm736sE_pqPS-FQvYgkwqbm-8VJBPGlQRTm89ZBE
读取合约状态:
smartweave read [CONTRACT TXID]

这样就成功部署了您的第一个 SmartWeave 合约。
与合约交互(写合约):
smartweave write [CONTRACT TXID] --key-file [YOUR KEYFILE] \
--input "[CONTRACT INPUT STRING HERE]"
如果要测试不写入主网,与测试网络交互,请将 --dry-run 附加到 --interact 调用中.
但由于我们是来学习的,所以也可以了解下使用 ArweaveJS 手动创建这些交易。参考以下代码:
import Arweave from 'arweave';
const arweave = Arweave.init({
host: 'arweave.net',
protocol: 'https',
port: 443
});
async function createContract() {
// Let's first create the contract transaction.
const contractTx = await arweave.createTransaction({ data: contractSource }, wallet);
contractTx.addTag('App-Name', 'SmartWeaveContractSource');
contractTx.addTag('App-Version', '0.3.0');
contractTx.addTag('Content-Type', 'application/javascript');
// Sign
await arweave.transactions.sign(contractTx, wallet);
// Let's keep the ID, it will be used in the state transaction.
const contractSourceTxId = contractTx.id;
// Deploy the contract source
await arweave.transactions.post(contractTx);
// Now, let's create the Initial State transaction
const initialStateTx = await arweave.createTransaction({ data: initialState }, wallet);
initialState.addTag('App-Name', 'SmartWeaveContract');
initialState.addTag('App-Version', '0.3.0');
initialState.addTag('Contract-Src', contractSourceTxId);
initialState.addTag('Content-Type', 'application/json');
// Sign
await arweave.transactions.sign(initialState, wallet);
const initialStateTxId = initialState.id;
// Deploy
await arweave.transactions.post(initialState);
}
createContract()
类似于以太坊的remix,AR也有自己的网页端部署工具
(↓点击此链接框,打开网页)

点击左下方登陆钱包,这里可以下载AR的钱包插件ArConnect进行连接,如果没有,可以先去下载。
进入后可以使用studio自带的代币合约部署,然后点击坐上的火箭图标进行部署。
此时需要选择部署的钱包,方法,部署网络,合约源,合约初始状态等。

部署成功后会获取交易ID
TX: YdVWeK5ftuIBmCTEbNQCwSFT13KZIJsuJ6OaVqjFvoY
这样就成功部署token-pst合约了。
与合约交互,读取合约数据:

与合约交互,写合约数据:

No activity yet