Create sends create database operation to block producer.
(meta ResourceMeta)
| 160 | |
| 161 | // Create sends create database operation to block producer. |
| 162 | func Create(meta ResourceMeta) (txHash hash.Hash, dsn string, err error) { |
| 163 | if atomic.LoadUint32(&driverInitialized) == 0 { |
| 164 | err = ErrNotInitialized |
| 165 | return |
| 166 | } |
| 167 | |
| 168 | var ( |
| 169 | nonceReq = new(types.NextAccountNonceReq) |
| 170 | nonceResp = new(types.NextAccountNonceResp) |
| 171 | req = new(types.AddTxReq) |
| 172 | resp = new(types.AddTxResp) |
| 173 | privateKey *asymmetric.PrivateKey |
| 174 | clientAddr proto.AccountAddress |
| 175 | ) |
| 176 | if privateKey, err = kms.GetLocalPrivateKey(); err != nil { |
| 177 | err = errors.Wrap(err, "get local private key failed") |
| 178 | return |
| 179 | } |
| 180 | if clientAddr, err = crypto.PubKeyHash(privateKey.PubKey()); err != nil { |
| 181 | err = errors.Wrap(err, "get local account address failed") |
| 182 | return |
| 183 | } |
| 184 | // allocate nonce |
| 185 | nonceReq.Addr = clientAddr |
| 186 | |
| 187 | if err = requestBP(route.MCCNextAccountNonce, nonceReq, nonceResp); err != nil { |
| 188 | err = errors.Wrap(err, "allocate create database transaction nonce failed") |
| 189 | return |
| 190 | } |
| 191 | |
| 192 | if meta.GasPrice == 0 { |
| 193 | meta.GasPrice = DefaultGasPrice |
| 194 | } |
| 195 | if meta.AdvancePayment == 0 { |
| 196 | meta.AdvancePayment = DefaultAdvancePayment |
| 197 | } |
| 198 | |
| 199 | req.TTL = 1 |
| 200 | req.Tx = types.NewCreateDatabase(&types.CreateDatabaseHeader{ |
| 201 | Owner: clientAddr, |
| 202 | ResourceMeta: types.ResourceMeta{ |
| 203 | TargetMiners: meta.TargetMiners, |
| 204 | Node: meta.Node, |
| 205 | Space: meta.Space, |
| 206 | Memory: meta.Memory, |
| 207 | LoadAvgPerCPU: meta.LoadAvgPerCPU, |
| 208 | EncryptionKey: meta.EncryptionKey, |
| 209 | UseEventualConsistency: meta.UseEventualConsistency, |
| 210 | ConsistencyLevel: meta.ConsistencyLevel, |
| 211 | IsolationLevel: meta.IsolationLevel, |
| 212 | }, |
| 213 | GasPrice: meta.GasPrice, |
| 214 | AdvancePayment: meta.AdvancePayment, |
| 215 | TokenType: types.Particle, |
| 216 | Nonce: nonceResp.Nonce, |
| 217 | }) |
| 218 | |
| 219 | if err = req.Tx.Sign(privateKey); err != nil { |