少年onfire第二季在哪个平台看?区块链黑客马拉松第

各位老铁们,大家好,今天由我来为大家分享少年onfire第二季在哪个平台看,以及区块链黑客马拉松第的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

我的第二场黑客马拉松是在Flow链上。你可能会问为什么我专门选择Flow而不是任何其他黑客马拉松?答案很简单。我从一开始就是社区的一部分;在ICO期间,当我第一次听说这个项目并以每个代币60美分的价格投资于Flow时。这是一笔划算的交易,尤其是当Flow的成本上涨到每枚代币40美元时。当时,所有代币都被锁定,ICO投资者无法出售任何代币。我只能以17美元的价格出售它们,在我看来,这已经很棒了。从那时起,我就积极关注社区。我想参加黑客马拉松第一季,但忙于其他几个项目。所以,当我听说黑客马拉松第二季即将到来时,我非常兴奋地带着我长期以来的慈善想法参加它。

由于这是我第一次接触Flow生态系统,所以我决定使用官方指南来学习Cadence和FCL-FlowClientLibrary,我们稍后会谈到。

官方指南帮助我更好地了解Cadence,指导我完成最常见的用例。虽然非常有用,但我发现它有点冗长,写了很多文章以便读者可以随时进入。这导致了重复并且显得笨拙。除此之外,我大约花了6-8个小时完成,对使用Flow生态系统的区块链项目的语言原理和架构有了基本的了解。Cadence和FCL均由DapperLabs开发,提供一致的开发人员体验。他们的API对我来说似乎也很成熟,尽管它是一种新语言,API将来可能会发生变化,涵盖了开发人员可能需要的几乎所有内容,它可能适用于企业规模的项目。我的项目较小,但仍然需要很多智能合约,我将在架构部分进行描述。

对于那些不知道的人来说,Cadence是DapperLabs编写的一种新的智能合约编程语言。

我很想尝试Cadence,因为不久前听说过这种语言,它的资源导向性质类似于Rust。将它与我使用过的成熟的Solidity进行比较。

Cadence的突出特点之一是其面向资源的性质,与编程语言Rust相似。Rust因其以借贷为中心的高效资源分配机制而闻名。同样,Cadence采用了类似的原则:资源一次只能存在于一个位置。这一基本概念保证了资源安全,特别是智能合约生态系统中的代币和其他关键资源。这种设计选择不仅增强了安全性,还有助于提高智能合约的可预测性和可靠性。

Cadence面向资源的方法本质上解决了困扰基于Solidity的合约的一些安全问题。通过防止资源重复和执行严格的所有权规则,Cadence最大限度地减少了重入攻击和未经授权的令牌传输等漏洞的可能性。这种对安全性的关注与DapperLabs的愿景是一致的,即为构建去中心化应用程序提供一个强大的平台,同时又不影响安全性。另一方面,Solidity的设计允许存在重入攻击等陷阱,这构成了重大的安全威胁。

**让我们简要检查一下我的黑客马拉松项目的应用程序架构和主要概念。**

对于我自己的项目来说,Svelte是理所当然的,所以:

SvelteKit作为应用程序框架。(对于那些不熟悉SvelteKit的人,您可能会认为它类似于Next.js)

TailwindCSS/DaisyUI-用于快速原型设计。(TailwindCSS用于样式,Tailwind混合样式库DaisyUI用于在Tailwindshugar之上提供更多样式,用于按钮、范围等基本组件。)

//package.jsonn{n...,n"devDependencies":{n"@sveltejs/adapter-vercel":"^3.0.2",n"@sveltejs/kit":"^1.22.1",n"autoprefixer":"^10.4.14",n"daisyui":"^3.1.11",n"eslint":"^8.44.0",n"eslint-config-prettier":"^8.8.0",n"eslint-plugin-svelte":"^2.32.2",n"postcss":"^8.4.25",n"prettier":"^3.0.0",n"prettier-plugin-svelte":"^2.10.1",n"svelte":"^4.0.5",n"tailwindcss":"^3.3.2",n"vite":"^4.4.2"n},n"dependencies":{n"@onflow/fcl":"^1.4.1",n"firebase":"^10.0.0",n"nanoid":"^4.0.2",n"ramda":"^0.29.0"n}n}n

如您所见,我正在使用4个客户端库:

firebase-我的用户数据存储解决方案+onSnapshotdb实时更新

ramda-类似于lodash,但是实用程序的函数式库(Ramda帮助利用了实用程序函数,如管道、组合等)

因为svelte首先是一个编译器,所以devDependency和依赖项之间没有真正的区别,但为了概念分离,我添加了客户端库作为依赖项,因此更容易阅读。

您可能想查看具有localStorage同步功能的简单sveltestorefirebaseapi包装器

import{getFirestore,doc,setDoc,getDoc}from'firebase/firestore';nimport{initializeApp}from'firebase/app';nimport{writable}from'svelte/store';nimport{browser}from'$app/environment';nimport{firebaseKeys}from'$lib/firebase/config';nnconstinitialState={};nnfunctioncreateDb(key){nconstinitialValue=nbrowser&&localStorage.getItem(key)n?JSON.parse(localStorage.getItem(key))n:initialState;nnconst{subscribe,set,update}=writable(initialValue);nconstini=initializeApp(firebaseKeys);nconstdb=getFirestore(ini);nnreturn{nset,nupdate,nsubscribe,ngetDbRef:()=>db,ngetDoc:async(path,id)=>{nconstdocRef=doc(db,path,id);nreturnawaitgetDoc(docRef);n},nsetDoc:async(path,id,payload)=>{ntry{nconstdocRef=doc(db,path,id);nawaitsetDoc(docRef,{...payload},{merge:true});nconsole.warn('DocumentaddedtoFirestore:',document);n}catch(error){nconsole.error('ErroraddingdocumenttoFirestore:',error);n}n},nuseLocalStorage:()=>{nsubscribe((current)=>{nif(browser){nlocalStorage.setItem(key,JSON.stringify(current));n}n});n}n};n}nnexportconstdb=createDb('app-db');n

我编写这个包装器是为了简化整个应用程序中firebaseapi的使用。

项目商店可能看起来有点复杂,但逻辑与zustand类似。

我最喜欢的一个方面是能够使用FCL集成智能合约交易和脚本,这对于创建无服务器应用程序非常方便。例如,传输代币如下:

...nexportconsttransferFlow=async(amount,addr,cid)=>{nlettransactionId=false;ninitTransactionState();nntry{ntransactionId=awaitfcl.mutate({ncadence:`nimportFungibleTokenfrom0x9a0766d93b6608b7nimportFlowTokenfrom0x7e60df042a9c0868nntransaction(amount:UFix64,to:Address){nn//TheVaultresourcethatholdsthetokensthatarebeingtransferrednletsentVault:@FungibleToken.Vaultnnprepare(signer:AuthAccount){nn//Getareferencetothesigner'sstoredvaultnletvaultRef=signer.borrow<&FlowToken.Vault>(from:/storage/flowTokenVault)n??panic("Couldnotborrowreferencetotheowner'sVault!")nn//Withdrawtokensfromthesigner'sstoredvaultnself.sentVault<-vaultRef.withdraw(amount:amount)n}nnexecute{nn//Getareferencetotherecipient'sReceivernletreceiverRef=getAccount(to)n.getCapability(/public/flowTokenReceiver)n.borrow<&{FungibleToken.Receiver}>()n??panic("Couldnotborrowreceiverreferencetotherecipient'sVault")nn//Depositthewithdrawntokensintherecipient'sreceivernreceiverRef.deposit(from:<-self.sentVault)n}n}n`,nargs:(arg,t)=>[arg(amount,t.UFix64),arg(addr,t.Address)],npayer:fcl.authz,nproposer:fcl.authz,nauthorizations:[fcl.authz],nlimit:50n});nn//storemethodntxId.set(transactionId);nn//subscribetosveltetransactionsnfcl.tx(transactionId).subscribe((res)=>{ntransactionStatus.set(res.status);nif(res.status){nif(res.status===4){ngetAccountBalance(addr,cid);nauth.addFlowTransaction({ntxId:transactionId,nevent:`${amount}Flowtransferredto${addr}at`,nstatus:res.status,ntimestamp:newDate().getTime()n});nsetTimeout(()=>transactionInProgress.set(false),2000);n}n}n});n}catch(e){ntransactionStatus.set(99);nconsole.warn(e);n}n};n...nn

这里的fcl.mutate方法接收具有键节奏和值的对象将是有效的节奏代码,这样您就可以轻松地从js文件编写事务和脚本。请参阅github中的flc操作的更多示例。

总的来说,使用Flow生态系统是令人愉快的。与以太坊生态系统相比,它显得更加简洁和简单。然而,公平地说,我上次使用Solidity生态系统大约是在三年前,所以情况可能已经发生了变化,尽管我对此表示怀疑。

尽管我没有获奖,但使用Flow生态系统还是令人愉快的。与以太坊生态系统相比,它显得更加简洁和简单。然而,公平地说,我上次使用Solidity生态系统大约是在三年前,所以情况可能已经发生了变化,尽管我对此表示怀疑。

好了,关于少年onfire第二季在哪个平台看和区块链黑客马拉松第的问题到这里结束啦,希望可以解决您的问题哈!