djblockchain是一个Django应用,它提供了用于存储区块链交易数据的表格,并具有区块链抽象层和部署队列工作流程。
项目描述
djblockchain是一个Django应用,它提供了用于存储区块链交易数据的表格,并具有区块链抽象层和部署队列工作流程。
交易表包含交易数据,例如合约名称、地址、如果有,则调用函数以及JSONField中的参数,这样您就无需查询区块链即可向用户显示交易信息。
当您在djblockchain中创建交易时,其"状态"默认为"保留"。状态为"保留"时没有操作,但将其更改为"部署",队列将找到区块链上要部署的新交易。
队列然后将Transaction.state设置为"部署中",以表示它正在尝试部署,然后调用Transaction.deploy(),负责部署合约或调用函数。只要您愿意,它会一直重试,以防止仅因为网络错误或其他原因而失败。在成功的情况下,它将Transaction.state设置为"监控",然后再次排队以确保任何进一步的修改都将在其自己的数据库事务中完成。
请注意,djblockchain支持自定义Transaction子类,这得益于Django模型继承功能,它将转换为与Transaction表相关的外键的新表。这使得Equisafe可以为每种合约类型和方法调用类型拥有一个专门的子类,并在需要时覆盖部署方法以添加自定义逻辑。
打印机会找到状态为"watch"的交易,并调用Transaction.watch(),这将等待在区块链上附加足够的区块以降低丢失交易的风险。默认情况下,它将等待5分钟;如果发生错误,它将返回,打印机会稍后再次尝试监视此交易,因为它仍然处于"watch"状态,尝试推进数据库中可能存在的其他交易的状态。如果成功,它将状态设置为"postdeploy",并返回以确保不会因其他原因而导致数据库事务中止。
然后打印机会找到状态为"postdeploy"的交易,如果你的自定义Transaction类有postdeploy()方法,则将状态设置为"postdeploying"并调用它。这是你在区块链上链式调用调用的地方,例如使用NyX,IssuingEntity Transaction类代表一个发行实体合同,用于创建KYCIssuer合同。因此,我们有IssuingEntity.postdeploy(),它创建一个KYCIssuer交易子类,打印机会找到并尝试部署,依此类推。
请注意,部署和监视实现是基于提供者的,我们目前有3个提供者
- Tezos
- Ethereum
- 伪造
因此,从Ethereum迁移到Tezos变得很容易,而伪造提供者是一种伪造区块链提供者,在deploy()和watch()函数中伪造合约地址。这使得在不涉及区块链的情况下测试/开发用户界面变得容易。请注意,我们还维护一个类似Ethereum沙盒的Tezos沙盒,以便更容易进行测试。
根据要求,同一时间每个交易发送者只应有一个打印作业。打印机将并行处理多个发送者账户,但不会并行处理同一发送者的多个交易。
虽然在理论上使用uWSGI打印机无法防止这种情况,但Account.spool方法确保了这一点,它检索负责此Account发送者_spool的Caller,并且只有当它当前未运行时才会打印它。因此,sender_queue作业应由Account.spool()方法打印。
这通过test_concurrency测试,它创建了两个账户并并行创建了3个交易,前两个与第一个用户账户相关联,最后一个与第二个用户账户相关联。
然后它将等待直到所有交易都完成,并比较如下状态历史条目
- 第二个交易不应在第一个交易完成之前开始,因为它们属于同一发送者账户,以避免nonce竞争条件
- 第三个交易应与第一个交易并行开始,因为它们属于不同的发送者账户,这样失败的发送者账户就不会阻止其他发送者账户
请注意,state_set还将在新交易的历史JSON列表字段中添加一个带时间戳的状态名称的新条目。这也以INFO级别进行记录。
状态摘要
- 持有:此交易仅在数据库中存储
- 部署:此交易应在可能的情况下部署
- 部署中:此交易目前正在部署中
- 监视:此交易已部署,需要监视
- 监视中:此交易目前正在监视中
- postdeploy:此交易已监视,需要执行postdeploy
- postdeploying:此交易的postdeploy方法目前正在执行
- 完成:此交易已完成
这通过test_state测试,它在一个进程fork中运行uWSGI服务器,并有一个专门用于测试的小型项目。djblockchain.djblockchain提供了一个易于容错的可维护区块链同步的Django应用程序的数据库。
项目详情
djblockchain-0.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 543450c17f922ccb4cc1fc9991fcdf9de504733d4be96171ca51a35429765372 |
|
MD5 | b834c8b0d6a0fed8f10004c038b424d9 |
|
BLAKE2b-256 | 4b686e3a61c1d79c6f90b8e0c3e7acce605182c6c2510be0db08fed6f755c7a0 |