Skip to content

Commit

Permalink
Introduce FlowToken.Administrator resource (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
psiemens authored May 25, 2020
1 parent 45af44e commit 0e8024a
Show file tree
Hide file tree
Showing 6 changed files with 191 additions and 79 deletions.
12 changes: 6 additions & 6 deletions contracts/internal/assets/assets.go

Large diffs are not rendered by default.

130 changes: 61 additions & 69 deletions src/contracts/FlowToken.cdc
Original file line number Diff line number Diff line change
@@ -1,45 +1,31 @@
/**
# FlowToken example contract
This is an example implementation of the Flow Fungible Token standard.
Is not part of the standard, but just shows how most tokens
should implement the standard, including the Flow network token itself.
The FlowToken contract only needs to be deployed in one account.
The only part of the contract that would be stored in each user's account
is the Vault object, below
The implementation does not need to redefine the interfaces that are
already defined in the Fungible Token interface
*/

import FungibleToken from 0x02

pub contract FlowToken: FungibleToken {

// Total supply of flow tokens in existence
// Total supply of Flow tokens in existence
pub var totalSupply: UFix64

// Event that is emitted when the contract is created
pub event FungibleTokenInitialized(initialSupply: UFix64)
pub event TokensInitialized(initialSupply: UFix64)

// Event that is emitted when tokens are withdrawn from a Vault
pub event Withdraw(amount: UFix64, from: Address?)
pub event TokensWithdrawn(amount: UFix64, from: Address?)

// Event that is emitted when tokens are deposited to a Vault
pub event Deposit(amount: UFix64, to: Address?)
pub event TokensDeposited(amount: UFix64, to: Address?)

// Event that is emitted when new tokens are minted
pub event Mint(amount: UFix64)
pub event TokensMinted(amount: UFix64)

// Event that is emitted when tokens are destroyed
pub event Burn(amount: UFix64)
pub event TokensBurned(amount: UFix64)

// Event that is emitted when a mew minter resource is created
// Event that is emitted when a new minter resource is created
pub event MinterCreated(allowedAmount: UFix64)

// Event that is emitted when a new burner resource is created
pub event BurnerCreated()

// Vault
//
// Each user stores an instance of only the Vault in their storage
Expand Down Expand Up @@ -73,7 +59,7 @@ pub contract FlowToken: FungibleToken {
//
pub fun withdraw(amount: UFix64): @FungibleToken.Vault {
self.balance = self.balance - amount
emit Withdraw(amount: amount, from: self.owner?.address)
emit TokensWithdrawn(amount: amount, from: self.owner?.address)
return <-create Vault(balance: amount)
}

Expand All @@ -87,7 +73,7 @@ pub contract FlowToken: FungibleToken {
pub fun deposit(from: @FungibleToken.Vault) {
let vault <- from as! @FlowToken.Vault
self.balance = self.balance + vault.balance
emit Deposit(amount: vault.balance, to: self.owner?.address)
emit TokensDeposited(amount: vault.balance, to: self.owner?.address)
vault.balance = 0.0
destroy vault
}
Expand All @@ -108,20 +94,39 @@ pub contract FlowToken: FungibleToken {
return <-create Vault(balance: 0.0)
}

// MintAndBurn
pub resource Administrator {
// createNewMinter
//
// Function that creates and returns a new minter resource
//
pub fun createNewMinter(allowedAmount: UFix64): @Minter {
emit MinterCreated(allowedAmount: allowedAmount)
return <-create Minter(allowedAmount: allowedAmount)
}

// createNewBurner
//
// Function that creates and returns a new burner resource
//
pub fun createNewBurner(): @Burner {
emit BurnerCreated()
return <-create Burner()
}
}

// Minter
//
// Resource object that token admin accounts could hold
// to mint and burn new tokens.
// Resource object that token admin accounts can hold to mint new tokens.
//
pub resource MintAndBurn {
pub resource Minter {

// the amount of tokens that the minter is allowed to mint
pub var allowedAmount: UFix64

// mintTokens
//
// Function that mints new tokens, adds them to the total Supply,
// and returns them to the calling context
// Function that mints new tokens, adds them to the total supply,
// and returns them to the calling context.
//
pub fun mintTokens(amount: UFix64): @FlowToken.Vault {
pre {
Expand All @@ -130,77 +135,64 @@ pub contract FlowToken: FungibleToken {
}
FlowToken.totalSupply = FlowToken.totalSupply + amount
self.allowedAmount = self.allowedAmount - amount
emit Mint(amount: amount)
emit TokensMinted(amount: amount)
return <-create Vault(balance: amount)
}

init(allowedAmount: UFix64) {
self.allowedAmount = allowedAmount
}
}

// Burner
//
// Resource object that token admin accounts can hold to burn tokens.
//
pub resource Burner {

// burnTokens
//
// Function that takes a Vault as an argument, subtracts its balance
// from the total supply, then destroys the Vault,
// thereby removing the tokens from existence.
// Function that destroys a Vault instance, effectively burning the tokens.
//
// Returns the amount that was burnt.
// Note: the burned tokens are automatically subtracted from the
// total supply in the Vault destructor.
//
pub fun burnTokens(from: @FungibleToken.Vault) {
let vault <- from as! @FlowToken.Vault
let amount = vault.balance
destroy vault
emit Burn(amount: amount)
}

// createNewMinter
//
// Function that creates and returns a new minter resource
//
pub fun createNewMinter(allowedAmount: UFix64): @MintAndBurn {
emit MinterCreated(allowedAmount: allowedAmount)
return <-create MintAndBurn(allowedAmount: allowedAmount)
}

init(allowedAmount: UFix64) {
self.allowedAmount = allowedAmount
emit TokensBurned(amount: amount)
}
}

// The initializer for the contract. All fields in the contract must
// be initialized at deployment. This is just an example of what
// an implementation could do in the initializer.
//
// The numbers are arbitrary.
//
init() {
// Initialize the totalSupply field to the initial balance
self.totalSupply = 1000.0
init(adminAccount: AuthAccount) {
self.totalSupply = 0.0

// Create the Vault with the total supply of tokens and save it in storage
//
let vault <- create Vault(balance: self.totalSupply)
self.account.save(<-vault, to: /storage/flowTokenVault)
adminAccount.save(<-vault, to: /storage/flowTokenVault)

// Create a public capability to the stored Vault that only exposes
// the `deposit` method through the `Receiver` interface
//
self.account.link<&FlowToken.Vault{FungibleToken.Receiver}>(
adminAccount.link<&FlowToken.Vault{FungibleToken.Receiver}>(
/public/flowTokenReceiver,
target: /storage/flowTokenVault
)

// Create a public capability to the stored Vault that only exposes
// the `balance` field through the `Balance` interface
//
self.account.link<&FlowToken.Vault{FungibleToken.Balance}>(
adminAccount.link<&FlowToken.Vault{FungibleToken.Balance}>(
/public/flowTokenBalance,
target: /storage/flowTokenVault
)

// Create a new MintAndBurn resource and store it in account storage
let mintAndBurn <- create MintAndBurn(allowedAmount: 100.0)
self.account.save(<-mintAndBurn, to: /storage/flowTokenMintAndBurn)
let admin <- create Administrator()
adminAccount.save(<-admin, to: /storage/flowTokenAdmin)

// Emit an event that shows that the contract was initialized
emit FungibleTokenInitialized(initialSupply: self.totalSupply)
emit TokensInitialized(initialSupply: self.totalSupply)
}
}


6 changes: 3 additions & 3 deletions src/contracts/FungibleToken.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ pub contract interface FungibleToken {
pub var totalSupply: UFix64

// Event that is emitted when the contract is created
pub event FungibleTokenInitialized(initialSupply: UFix64)
pub event TokensInitialized(initialSupply: UFix64)

// Event that is emitted when tokens are withdrawn from a Vault
pub event Withdraw(amount: UFix64, from: Address?)
pub event TokensWithdrawn(amount: UFix64, from: Address?)

// Event that is emitted when tokens are deposited to a Vault
pub event Deposit(amount: UFix64, to: Address?)
pub event TokensDeposited(amount: UFix64, to: Address?)

// Provider
//
Expand Down
2 changes: 1 addition & 1 deletion test/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.13

require (
github.com/dapperlabs/flow-emulator v1.0.0-alpha.7.0.20200522225230-51e97f42cb03
github.com/onflow/cadence v0.3.0-beta3.0.20200522221348-6e99c1cc6bc8
github.com/onflow/cadence v0.3.0-beta4.0.20200524043105-6b94cabe6a65
github.com/onflow/flow-go-sdk v0.3.0-beta1
github.com/stretchr/testify v1.5.1
)
15 changes: 15 additions & 0 deletions test/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi
github.com/axw/gocov v1.0.0/go.mod h1:LvQpEYiwwIb2nYkXY2fDWhg9/AsYqkhmrCshjlUJECE=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ=
github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
Expand All @@ -82,6 +83,7 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
Expand All @@ -104,6 +106,8 @@ github.com/dapperlabs/flow-emulator v1.0.0-alpha.7.0.20200522225230-51e97f42cb03
github.com/dapperlabs/flow-emulator v1.0.0-alpha.7.0.20200522225230-51e97f42cb03/go.mod h1:c2n0nG7Wikp17yPuaAer9xaJLzjGcOCfEKiM29MQia4=
github.com/dapperlabs/flow-go v0.3.2-0.20200520200337-3476e94b144b h1:ZBwPx8vlkkotdxh0UO/vlmx0lIT7PDaJJ0FGCcAMSyY=
github.com/dapperlabs/flow-go v0.3.2-0.20200520200337-3476e94b144b/go.mod h1:qdTB1Q5uKj4uRq2ztmCMV9tggmkFUfE2HXOZVsD6PpM=
github.com/dapperlabs/flow-go v0.3.2-0.20200524173840-eafdd749ee5d h1:VS2qNkzIUTG7lWKlSe5bRWda/nGJe14nhEUnejiXILI=
github.com/dapperlabs/flow-go v0.3.2-0.20200524173840-eafdd749ee5d/go.mod h1:HmZLRcKPTgbuyoJm/U7OnCCH1xmRVVm2T9YzwIupJ6E=
github.com/dapperlabs/flow-go/crypto v0.3.2-0.20200312195452-df4550a863b7/go.mod h1:6UyHoekg86OJnzTz9hp3Ubzp2ZkrDMFg2krGbVEiloU=
github.com/dapperlabs/flow-go/crypto v0.3.2-0.20200505040645-6043e0fe5246 h1:Do+yDKdrWcyFGvDdhQ7SthDADpHgoD47D8xB2Vyz7yc=
github.com/dapperlabs/flow-go/crypto v0.3.2-0.20200505040645-6043e0fe5246/go.mod h1:DtpZLXm4h787U0fkDZ6F9/S3vpRr/JT8xFNJ9mfKzXw=
Expand Down Expand Up @@ -382,6 +386,7 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp
github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
Expand Down Expand Up @@ -436,6 +441,8 @@ github.com/onflow/cadence v0.3.0-beta3 h1:muvmL9o0iqyUVL8XCAlhzAiJsX42syvk9GmEkt
github.com/onflow/cadence v0.3.0-beta3/go.mod h1:GaLQ7IsJi5bqpH66GprNs8uoQtperK/xbXXIOq11nZw=
github.com/onflow/cadence v0.3.0-beta3.0.20200522221348-6e99c1cc6bc8 h1:hSdP8PyuFn61VzrQN9XU01pZvBbvPqoryPOXUKDAaOA=
github.com/onflow/cadence v0.3.0-beta3.0.20200522221348-6e99c1cc6bc8/go.mod h1:GaLQ7IsJi5bqpH66GprNs8uoQtperK/xbXXIOq11nZw=
github.com/onflow/cadence v0.3.0-beta4.0.20200524043105-6b94cabe6a65 h1:1ZqKddG0CVWgxJiFmo23eaN0bcIBRu29QFjYLGWdNE0=
github.com/onflow/cadence v0.3.0-beta4.0.20200524043105-6b94cabe6a65/go.mod h1:GaLQ7IsJi5bqpH66GprNs8uoQtperK/xbXXIOq11nZw=
github.com/onflow/flow-go-sdk v0.3.0-beta1 h1:HmAqosPHLoNmYfhUECsSFpvSD4kWIkJ+Xs8LAJijKDc=
github.com/onflow/flow-go-sdk v0.3.0-beta1/go.mod h1:8v6vcYGh5/PtYcM3IXflLcCb00I91WDbnNF8SjirnlI=
github.com/onflow/flow/protobuf/go/flow v0.1.4 h1:xRdLYCxR/V6lq03ElK3g0T/F8pCIpLrKs2IHQTYr9rM=
Expand All @@ -448,6 +455,7 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
Expand All @@ -464,20 +472,24 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
Expand Down Expand Up @@ -538,7 +550,9 @@ github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpP
github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
github.com/uber/jaeger-client-go v2.22.1+incompatible h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM=
github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw=
github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
Expand Down Expand Up @@ -570,6 +584,7 @@ go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM=
go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
Expand Down
Loading

0 comments on commit 0e8024a

Please sign in to comment.