精华内容
下载资源
问答
  • 希望所有的加密锁使用者能够更好的使用他的加密锁来完成对自己软件的保护。 加密技术 → 在很少使用的代码中调用加密锁。那么看似已破译的程序就会经常发生异常现象。 → 根据时间调用加密锁。上午调用的数据下午...
  • 比如b64decode,就是用来解码七牛的URL安全的Base64编码用的,所以这是一个面向开发者的工具,任何的被认为适合加到该工具中的命令需求,都可以在里面提出来,我们会尽快评估实现,以帮助大家更好地使用七牛服务。...
  • 为了更好地运营媒体,我们需要己运营的媒体号更具特色,能够吸引更多的粉丝,这样才能在运营一段时间后给自己带来收益变现。 这个看似简单,但实际上要吸引粉丝的过程是很困难的。许多媒体运营商利用不断的投稿...

    现在越来越多的人开始接触新媒体,很多公司和个人开始利用新媒体发展自己的事业。这种利用现代移动互联网手段和微信、微博、贴吧等新兴媒体平台工具进行品牌推广、促销、产品营销的运营手段,称为新媒体运营。
    在这里插入图片描述

    随着新媒体运营行业人数的增加,很多人看到了商机,但在实践中不容易操作。为了更好地运营新媒体,我们需要己运营的媒体号更具特色,能够吸引更多的粉丝,这样才能在运营一段时间后给自己带来收益变现。

    这个看似简单,但实际上要吸引粉丝的过程是很困难的。许多新媒体运营商利用不断的投稿吸引粉丝,但这些投稿一般具有时效性,是现在受欢迎的话题和话题性的人物。这类类型的帖子收益还是比较高的,可是一旦被网站发现是具备广告性质的,都会被删掉甚至封号。

    同时,常用同一个IP地址发表同类型的帖子,许多网站甚至会将这个IP直接封掉。这个时候就需要代理IP软件的帮助了。在IP被封的时候可以使用新的的IP进行工作,使用代理IP可以提升工作效率,更好的完成工作的推广,IPIDEA拥有大量IP资源,高质量的HTTP的SOCKS5a代理和HTTP代理,永远追求高效,为您的工作保驾护航。

    展开全文
  • 由云计算、移动应用程序和物联网构成的...流经政府系统的海量数据中包含有关攻击者的有价值的信息,如果安全团队想要找出有意义的模式,并更好地了解攻击者的计划,就必须以正确的方式分析这些数据。 这个任务...

    由云计算、移动应用程序和物联网构成的新世界为几乎来自任何地方的复杂网络攻击提供了可能。为了 防范这些攻击并提高网络安全运营,政府必须了解攻击者的心态。幸运的是,认知计算工具可以向安全团队提供洞察力,让他们始终领先黑客一步。
    克服数据挑战
    流经政府系统的海量数据中包含有关攻击者的有价值的信息,如果安全团队想要找出有意义的模式,并更好地了解攻击者的计划,就必须以正确的方式分析这些数据。
    这个任务说起来容易做起来难。政府机构在时间和资源上常常是有限的。此外,通过这些网络生成的数据没有一种有条理的格式:根据 International Data Corporation 的一份报表估计,90% 的数据都是非结构化数据。为了克服这些挑战,并了解黑客的攻击过程,政府需要一些先进的技术,以便可以在最短的时间内分析具有不同格式的数据。
    图片描述
    了解黑客的攻击过程
    认知计算是一种对政府机构特别有吸引力的解决方案,因为它结合使用了数据分析和机器学习,提供了攻击者思维方式的更深入洞察。人们通常认为认知计算低于人工智能,但高于机器学习,因为它扩大了人类的认知,并通过与用户互动来学习用户。这种类型的系统可以学习攻击者的思维方式。然后,确定攻击者的作案手法并迅速保护政府网络。
    此外,这些系统能够与外部数据库和系统进行协作,收集更多的相关数据。这种合作是必不可少的;来自 联合国毒品和犯罪问题办公室 的一份报表显示,80% 的黑客正在携手合作,以便共享数据、工具和专业知识,所以他们的攻击往往非常先进。在通过认知系统集成和分析来自各种结构化和非结构化数据源的信息时,攻击者的攻击模式就会清晰浮现,我们就可以制定恰当的网络安全策略。
    为认知计算增加脑力
    根据 Information Age 的报道,当认知计算系统与人的智力联合起来的时候,就会进一步增强认知计算系统的威力。认知计算永远无法完全替代安全专家的价值,因为人类有一些品质(比如常识)是无法被复制的。不过,通过最新技术获得洞察,肯定能够帮助安全团队制定更快、更明智的决策。
    ……更多内容链接内容

    展开全文
  • Windows Sysinternals Suite里的工具,你将有能力处理Windows的各种问题,而且不花一毛钱。 Sysinternals之前为Winternals公司提供的免费工具,Winternals原本是一间主力产品为系统复原与资料保护的公司,...
  • 之前为Winternals公司提供的免费工具,Winternals原本是一间主力产品为系统复原与资料保护的公司,为了解决工程师平常在工作上遇到的各种问题,便开发出许多小工具。之后他们将这些工具集合起来称为Sysinternals,并放在...
  • 利用一个功能强大的注册表数据库来统一集中管理系统硬件设施,软件配置等信息,从而方便了管理,增强了系统的稳定性。最直观的一个实例就是,为什么windows下的不同用户可以拥有各自的个性化设置,如不同的墙纸,...
  • 2.进程管理:许多恶意软件为了欺骗用户,将自己伪装成正常的系统进程。进程管理可以帮助用户认识和管理系统的进程。可以对进程加载的模块进行注销及粉碎等操作。表示非系统进程。 3.启动管理:电脑用户中了QQ病毒...
  • 我们学习开源项目也是为了成为更好的开发者。通过『观察大师,模仿大师,最终成为大师』,所以要定位到那些厉害的程序员和定期关注他们的动态。</li></ul> 如果不想看这么多,可以直接看该...
  • 如果您使用的是Oracle8时,还可以利用更方便的DEBUG环境.   ■强大的SQL执行机能     用户使用Object Browser提供的全屏幕编辑器,可以很自由的输入SQL文并执行.结果...
  • Maven2 的特性.7z

    2013-04-15 14:55:38
    本文主要阐述 Maven2 的新特性,这些新特性可以大大缩短了开发管理中的工作量,使得开发人员将精力集中在实际的业务问题上。 Maven 出现到现在也有很长时间了,初识它的感觉至今仍清晰的印在脑海中。现在想来,...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    有用又有吸引力的移动服务,并推广这些产品。 Android 进一步推进了 " 随时随地为每个人提供信息 " 这一企 业 目标的实现。 � Open Handset Alliance 汇集了多家业界巨头。运营商如: China Mobile 、 NTT DoCoMo ...
  • 通过阅读本书,读者将全面了解oracle 11g特性,从而进行更好的管理或开发。  本书结构清晰,内容全面,示例丰富,适用于所有dba 和开发人员。 作译者  Charles Kim Oracle OCP DBA、Red Hat RHCT和微软MCP,...
  • 超旺软件最新单机版

    2019-04-13 01:06:33
    ※ 在进货单和销售单的录入中,用户可能经常出现在已录的行中间插入或删除一条记录,超旺软件充分利用了鼠标右键的功能,在商品栏目任一位置点击鼠标右键,即可进行增加明细、删除明细、选择商品的操作。...
  • 我们可以很方便在云端开发、调试函数,并且可以直接部署到对应的 FaaS 平台。这样的好处是避免了在本地安装各种开发工具、配置各种环境。常见的 Web IDE 有 AWS 的 Cloud9、阿里云的函数计算 Web IDE、腾讯...
  • 建立后工程文件列表如下图。 2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。 3.选择Dialog without Buttons。 4.类名设为myDlg。 5.点击Finish 完成。注意这里已经默认将其加入到了我们刚建的...
  • 创建此存储库是为了社区创建一个工具集和单一点的场所,使人们能够以很少的支出或设置难度进行小型区域性活动,就如何设置和利用它进行公开,透明的讨论。 。 2020年12月18日更新-我们已经在Github Pages上的上创建...
  • 为了更好地理解这种方法,本文将探讨在不同年代的系统开发与设计中是如何使用JTAG的,通过借助过去有关JTAG接入的经验或投入,推动设计向一代发展。  大多数复杂电子系统都以这种或那种方式用到了IEEE1149.1...
  • 为了更好地理解这种方法,本文将探讨在不同年代的系统开发与设计中是如何使用JTAG的,通过借助过去有关JTAG接入的经验或投入,推动设计向一代发展。  大多数复杂电子系统都以这种或那种方式用到了IEEE1149.1...
  • 几乎每个企业都需要预测未来,以便做出更好的决策并更有效分配资源。 该存储库提供了用于构建预测解决方案的示例和最佳实践准则。 该存储库的目标是构建一套全面的工具和示例,以利用预测算法的最新进展来构建...
  • 开发人员,测试人员,技术架构师,公司领导,文档人员等项目团队成员之间的有效的沟通在项目时间较长,项目较大的项目中,总是存在较多瓶颈,产生一些无法预料的风险,利用VSTS Team Foundation Server可以更好地使...
  • 开发人员,测试人员,技术架构师,公司领导,文档人员等项目团队成员之间的有效的沟通在项目时间较长,项目较大的项目中,总是存在较多瓶颈,产生一些无法预料的风险,利用VSTS Team Foundation Server可以更好地使...
  • 有了Windows,一切都办了,Windows将诸如按钮、菜单、工具栏等等这些通用界面的绘制及动作都交给了系统,程序员就不用花心思再画那些按钮了,可以将多的精力放在程序的功能实现方面。 所有的标准界面元素都被...
  • 利用本文中学到的知识,你的DApp用户就可以省掉gas,获得更好的用户体验,或者在你的智能合约中构建新颖的代理模式。 不过等一下!还不止这些为了方便你的使用,我已经将相关工具放到这个Github仓库

    每个人都在讨论无gas以太坊交易,因为没有人喜欢支付gas费用。但是以太坊网络能够精准地运转恰恰是因为交易需要手续费。那么如何实现无gas交易呢?让我们一起学习无gas以太坊交易的魔法!

    在这篇文章中,我们将学习如何实现无gas交易模式。你会发现虽然在以太坊上没有免费的午餐,但可以用有趣的方式来转移gas成本。利用本文中学到的知识,你的DApp用户就可以省掉gas,获得更好的用户体验,或者在你的智能合约中构建新颖的代理模式。

    不过等一下!还不止这些!为了方便你的使用,我已经将相关工具放到这个Github仓库了。因此现在你要实现无gas以太坊交易的门槛已经大大降低了。

    现在让我们开始吧!

    用自己熟悉的语言学习 以太坊DApp开发Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

    1、一些背景知识

    我不得不承认,虽然我了解如何在智能合约中实现无gas交易,但是并不太了解背后的密码学知识。不过对我而言这算不上大的障碍,因此如果你也不太熟悉密码学,相信也不会影响你实现无gas以太坊交易。

    据我所知,我的私钥被用来签名发送到以太坊网络的交易,在这个过程中运用了一些密码学技术来识别我的身份并存入变量msg.sender,这是以太坊中访问控制的基石。

    无gas交易背后的魔法在于,我们可以用自己的私钥为希望执行的合约交易 制作一个签名。

    签名是链下生成的,无需消耗任何gas。一旦签名完成,就可以将交易发送给其他人替我们执行,同时也替我们支付gas费用。

    使用签名的合约函数通常就是一个普通的函数,不过支持传入额外的签名参数。例如在dai.sol中,我们可以看到如下的approve函数:

    function approve(address usr, uint wad) external returns (bool)
    

    同时也可以看到permit函数,它和approve做的事情一样,只是支持额外的签名参数:

    function permit(address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external
    

    不用担心看不懂这些额外的参数,下面会讲解。我们需要注意的是,上面这两个函数是如何处理allowance映射的:

    function approve(address usr, uint wad) external returns (bool)
    {
      allowance[msg.sender][usr] = wad;
      …
    }
    
    function permit(
      address holder, address spender,
      uint256 nonce, uint256 expiry, bool allowed,
      uint8 v, bytes32 r, bytes32 s
    ) external {
      …
      allowance[holder][spender] = wad;
      …
    }
    
    • 如果你调用approve方法,那么就意味着允许spender账号操作不超过wad个你持有的代币。- 如果你把一个有效签名给了其他人,那么那个人就可以通过调用permit方法 来允许spender账号操作不超过wad个你持有的代币。

    是不是一样?

    因此基本上来说,无gas交易背后的模式就是制作一个签名,别人用这个签名就可以用你的身份安全地执行一个特殊的交易,就像你授权别人执行一个方法。

    这其实就是一种代理模式。

    2、无gas交易规范

    如果你和我一样,那你可能马上就会深入研究代码。我立刻注意到了一个注释:

    // — — EIP712 niceties — -
    

    看起来是一个以太坊规范,因此我就研究了一下,不过当时并没有理解。现在我已经理解,并且可以用浅显的话语来解释了。

    EIP712描述了为合约方法生成签名的通用方式。其他的EIP则描述如何在特定的用例中运用EIP712。例如EIP2612描述如何将EIP712签名用于permit方法,该方法和ERC20代币中的approve方法实现相同的功能,就像我们在前面看到的。

    如果你只是想实现一个已经定义过的签名方法,比如为你的MetaCoin合约添加支持签名的approve方法,那么阅读EIP2612就够了。更简单的办法就是直接继承一个已经实现了EIP2612的合约。

    在这篇文章中,我们将研究dai.sol中的一种无gas交易实现,这会帮助我们更清晰地理解其内部机制。dai.sol的无gas实现是在EIP2612之前完成的,因此有一些区别。不过这不是大问题。

    3、签名构成

    在dai.sol中可以看到EIP712的一个早期实现,它允许dai持有者在链下计算签名并交由spender代为执行approve方法,而不是由dai持有者直接调用approve方法。

    整个实现包含4个部分:

    • DOMAIN_SEPARATOR
    • PERMIT_TYPEHASH
    • nonces变量
    • permit函数

    下面是DOMAIN_SEPARATOR以及相关的变量:

    string  public constant name     = "Dai Stablecoin";
    string  public constant version  = "1";
    bytes32 public DOMAIN_SEPARATOR;constructor(uint256 chainId_) public {
      ...
      DOMAIN_SEPARATOR = keccak256(abi.encode(
        keccak256(
          "EIP712Domain(string name,string version," + 
          "uint256 chainId,address verifyingContract)"
        ),
        keccak256(bytes(name)),
        keccak256(bytes(version)),
        chainId_,
        address(this)
      ));
    }
    

    DOMAIN_SEPARATOR就是一个用来唯一标识智能合约的哈希,它是利用一个标记EIP712域(合约名称、版本、链ID、部署地址)的字符串构造的。

    所有这些信息在构造函数中进行哈希并存入DOMAIN_SEPARATOR变量,dai持有者在生成签名时需要使用这个变量值,并且在执行permit方法时需要匹配。DOMAIN_SEPARATOR可以确保一个签名仅对单一合约有效。

    下图是PERMIT_TYPEHASH:

    在这里插入图片描述

    PERMIT_TYPEHASH是函数名(首字母大写)以及全部参数(包括类型和参数名)的哈希,其目的是清晰界定签名的适用方法。

    在permit方法中需要处理签名,如果适用的PERMIT_TYPEHASH并不是针对这个方法的,交易就会回滚。这样就确保了一个签名仅可以用于特定的方法。

    下面是nonces映射:

    mapping (address => uint) public nonces;
    

    nonces应用用来注册一个特定的dai持有者已经使用的签名数量。当创建签名时,需要包含一个nonces值,当执行permit方法时,nonce必须匹配该持有者已经使用的签名数量。这一措施用来确保签名仅使用一次。

    这三者结合在一起,PERMIT_TYPEHASH、DOMAIN_SEPARATOR以及nonce,就可以确保一个签名仅可以用于特定的合约、特定的方法,并且只可以使用一次。

    现在让我们看看在智能合约中是如何处理签名的。

    4、permit方法

    permit方法是dai.sol中实现的一个函数,它允许使用签名来实现approve相同的功能。

    // --- Approve by signature ---
    function permit(
      address holder, address spender,
      uint256 nonce, uint256 expiry, bool allowed,
      uint8 v, bytes32 r, bytes32 s
    ) external
    

    正如你看到的,permit方法包含很多参数。这些参数是计算签名需要的数据,以及签名数据v、r和s。

    传入创建签名的参数看起来很傻,但是这是必须的。因为从签名中能够恢复出来的只有签名创建者的地址。我们需要所有这些参数以及恢复出来的创建者地址来确保签名的有效性。

    首先我们利用这些参数计算一个摘要数据。dai持有者需要在链下进行同样的计算,这是生成签名的必要环节:

    bytes32 digest =
      keccak256(abi.encodePacked(
        "\x19\x01",
        DOMAIN_SEPARATOR,
        keccak256(abi.encode(
          PERMIT_TYPEHASH,
          holder,
          spender,
          nonce,
          expiry,
          allowed
        ))
      ));
    

    使用ecrecover方法以及v、r和s,我们可以从签名中恢复出地址。如果这就是dai持有者的地址,那么我们就知道参数对上了,也就是说DOMAIN_SEPARATOR、PERMIT_TYPEHASH、nonce、holder、spender、expiry以及allowed都对。如何对不上,就拒绝这个签名:

    require(holder == ecrecover(digest, v, r, s), "Dai/invalid-permit");
    

    这个地方需要注意。签名涉及很多参数,其中有些参数比较晦涩,例如链ID(DOMAIN_SEPARATOR的一部分)。其中任何参数对不上都会导致签名被拒绝,这使得链下签名的调试非常困难。

    现在我们指导持有者已经授权了这个方法调用。接下来我们需要确认签名没有被滥用。

    首先检查当前时间是否在expiry之前,这样可以让授权仅在特定时间点之前有效。

    require(expiry == 0 || now <= expiry, "Dai/permit-expired");
    

    我们也可以检查具有这个nonce的签名还没有使用过,这样就可以确保一个签名只能使用一次。

    require(nonce == nonces[holder]++, "Dai/invalid-nonce");
    

    现在通过了!dai.sol更新allowance,触发事件,就这些简单的工作了。

    uint wad = allowed ? uint(-1) : 0;
    allowance[holder][spender] = wad;
    emit Approval(holder, spender, wad);
    

    dai.sol合约使用二进制方式处理allowance,在我们提供的代码 中则使用了更传统的方式来处理allowance。

    5、创建链下签名

    创建签名不适合胆小的人,不过只需要一点练习和耐心,其实也容易掌握。我们用三个步骤来复制智能合约的permit方法中的逻辑:

    • 生成DOMAIN_SEPARATOR
    • 生成摘要
    • 生成交易签名

    下面的函数将创建DOMAIN_SEPARATOR。它和dai.sol构造函数中的代码功能一样,不过使用的是javascript,以及ethers.js中的keccak256、defaultAbiCoder和toUtfBytes。这个函数需要代币名称、部署地址以及链ID,并假设代币版本为"1":

    在这里插入图片描述

    下面的函数将为特定的permit调用创建摘要。注意holder、spender、nonce和expiry都作为参数传入。同时传入一个approve.allowed参数,虽然你可以始终将其设置为true。注意这里的PERMIT_TYPEHASH我们是直接从dai.sol拷贝过来的。

    在这里插入图片描述

    一旦我们得到摘要,那么进行签名就相对容易多了。我们使用ethereumjs-util中的ecsign对移除0x前缀的摘要数据进行签名。注意这个步骤我们需要用户私钥。

    在这里插入图片描述

    上述js函数的调用方法如下:

    在这里插入图片描述

    注意我们在调用permit时是如何使用之前创建摘要的那些参数的。只有这样签名才会有效。

    另一点需要注意的是,在这个代码片段中user2只调用两个交易。user1表示dai持有者,他是创建摘要并进行签名的账号。然而user1并不需要消耗任何gas。

    user1将签名给user2,user2使用这个签名来执行permit方法以及transferFrom方法。

    在user1看来,这就是一个无gas交易,他不需要消耗任何wei。

    6、结论

    本文展示了如何使用无gas交易,澄清了无gas实际上意味着将gas成本转嫁给了其他人。为此我们需要智能合约中的方法能够处理预签名交易。

    不过使用这一模式有显著的好处,因此无gas交易已经被广泛使用。签名允许交易的gas成本从用户转移到服务提供商,从而消除了很多场景中的用户进入障碍。无gas交易也支持更加高级的代码模式实现,通常都会带来显著的用户体验改善。


    原文链接:如何实现无Gas以太坊交易 — 汇智网

    展开全文
  • NetSupport 教师助理应用程序是传统桌面教师端应用程序的延伸,可在您现有的 NetSupport 管理的教室环境中使用,为教师提供了在 ICT 教学区周围更好的移动性,助教利用这一理想工具可以帮助监督学生进度。...
  • ration rose key

    2011-01-16 08:49:49
    财富 100 强中有 98 家企业依靠 Rational 工具更快构建出了更好的软件。 随需应变的时代 现在,客户的要求提高了。他们要求以更低的成本获得更高质量的产品。他们希望更快调整,得到更个性化的服务和更高的定制...
  • NetSupport 教师助理应用程序是传统桌面教师端应用程序的延伸,可在您现有的 NetSupport 管理的教室环境中使用,为教师提供了在 ICT 教学区周围更好的移动性,助教利用这一理想工具可以帮助监督学生进度。...
  • 要想学习和掌握它的诸多特性,只能从Oracle手册入手,而数万页的11g手册不免让人心存畏惧,从中挑出对特性的描述需要一双“火眼金睛”。  消息!在本书第1版出版时隔4年后,Thomas Kyte及时了解了大家的这...
  • 学习一个新工具时,有些人可能只是找一本入门书,粗略翻翻就浅尝辄止,并相信实践出真知;有些人喜欢系统研习文档,对每个细节精雕细刻;有些人喜欢收集一些独门密技;有些人喜欢亲身尝试书上的基本用例……。...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 290
精华内容 116
关键字:

为了更好地利用这些新工具