当前位置: 首页 > news >正文

vs网站开发参考文献唐河做网站

vs网站开发参考文献,唐河做网站,下面哪些不是网页制作工具,公司网站建设怎么我们通过属性宏来实现合约的init函数#xff0c;call函数其实和init是类似的#xff1b; GitHub - XuHugo/xwasm 构建属性宏#xff0c;要在cargo.toml里面设置一些参数#xff0c;这是必须的。一般来说#xff0c;过程宏必须是一个库#xff0c;或者作为工程的子库…        我们通过属性宏来实现合约的init函数call函数其实和init是类似的 GitHub - XuHugo/xwasm 构建属性宏要在cargo.toml里面设置一些参数这是必须的。一般来说过程宏必须是一个库或者作为工程的子库不能单独作为一个源文件存在。 [dependencies] syn { version 1.0.63, features [ full, extra-traits ] } quote 1.0.0 proc-macro2 1.0[lib] proc-macro true 而编写过程宏在stable版本里我们需要借助三个crate: syn这个是用来解析语法树(AST)的。各种语法构成quote解析语法树生成rust代码从而实现你想要的新功能。proc_macro(std) 和 proc_macro2(3rd-party) 实现init的属性宏 函数的签名如下这个格式除了函数名字其他的都不要修改 #[proc_macro_attribute] pub fn init(attr: TokenStream, item: TokenStream) - TokenStream { 需要加一个关键字proc_macro_attribute由两个参数一个attr一个item对应到合约里就是如下图 下一步解析attr找到contract对应的合约名称放到contract变量中 let attrs parse_macro_input!(attr as AttributeArgs); let contract get_attribute(attrs.clone(), contract).unwrap().unwrap(); 然后处理payable之前没有讲解这个标记的作用其实就是标记合约函数是否可以接口币 let mut setup_function_args proc_macro2::TokenStream::new();let mut function_args vec![];let amount_ident format_ident!(amount);if contains_attribute2(attrs.clone(), payable) {function_args.push(quote!(#amount_ident));} else {setup_function_args.extend(quote! {if #amount_ident ! 0 {return -1;}});}; 就是通过contains_attribute2判断是否包含payable如果有就会将用户传入的代币的数量记录否则就判断用户传入代币数量不为零就返回-1 然后就是结合合约名字给函数重新命令我们设定init函数的名字为init_合约名称如果单单用这个做标识会有冲突先不管这个 let ast parse_macro_input!(item as Item);let init_function_name format_ident!(init_{}, contract.value());let init_name format!(init_{}, contract.value()); 现在开始处理item了首先判断是否是函数不是就返回错误了 let function_name if let syn::Item::Fn(itemfn) ast.clone() {itemfn.sig.ident} else {return syn::Error::new(Span::call_site(), format!(#[init] must be function.)).into_compile_error().into();}; 最后重新组合init函数 let output quote! {#ast#[export_name #init_name]pub extern C fn #init_function_name(amount:u64)-i32{use xq_std::{ContractContext,serde_json};let initctx ContractContext;#setup_function_argsmatch #function_name(initctx, #(#function_args),*){Ok(o){let r serde_json::to_string(o).unwrap();ContractContext.return_data(r.clone());return 1}Err(e){let err e.to_string();ContractContext.error(err.clone());return 0}}}}; pub extern C fn 需要注意虽然我们用rust写合约但是写完之后是编译成wasm格式的相当于一个库文件了最终谁会调用并不明确所以需要使用这FFI的形式。 这部分其实还是最终调用了我们item部分的函数只是再调用之前添加一些检测和前置工作例如payable的检测调用之后呢也添加了一些工作例如将返回值转化为json的字符串。有点类似与python的修饰符。 call函数的实现其实和这个是一样有细微的差别大家可以自己去对比一下。
http://www.w-s-a.com/news/808291/

相关文章:

  • 南通网站托管js建设网站外网
  • 成都企业网站公司wordpress内页模板
  • 58同城建网站怎么做wordpress评论显示数字ip
  • 免费制作论坛网站模板免费下载北京网站制作长沙
  • 旅游网网站建设网站如何自己做seo
  • 如何验证网站所有权做二手家具回收哪个网站好
  • 做哪种网站赚钱项目开发流程
  • 网站建设和网站网络推广网站建设软件定制
  • 站长工具网址查询全球云邮登陆网站
  • 宁波 住房和建设局网站网上发帖推广
  • 平面设计在线网站工业设计公司有哪些
  • 福州网站设计外包公司网站做的比较好
  • 如何设计网站首页网站开发综合技能实训心得体会
  • 用织梦做的网站好用吗w网站链接如何做脚注
  • 东莞做网站公司在哪哪里有网站培训的
  • 做宣传 为什么要做网站那重庆网站建设公司在线联系
  • 网站设计制作售价多少钱制作图片的软件是
  • 网站验证码目录简单带数据库的网站模版
  • 制作网站用c#做前台网站建设专题的意义
  • 广西建设职业技术学院教育网站牡丹区建设局网站
  • 网站后台怎么用ftp打开上海外贸进出口有限公司
  • 淘宝建设网站的意义大学生做那个视频网站
  • 如何提高你的网站的粘性建设银行流水网站
  • 微信h5在哪个网站做泰州专业网站制作公司
  • 现在.net做网站的多吗建设工程造价网
  • pc访问手机网站跳转违法网站开发人员
  • 网站前端做报名框wordpress 启动慢
  • 沈阳做网站客户多吗前端可以做网站吗
  • 网站设计规划书新媒体营销策略分析
  • dw个人网站主页怎么做天津工程信息建设网